Анимация
JavaScript
|
Главная Библионтека # Структура flock для SunOS
BEGIN « По данным c2ph: typeclef=s2 12 s2, sizeof=16 my $FLOCK STRUCT = s s 1 1 s s; sub sunos flock { If (wantarray) { my (Stype, Swhence, Sstart, Slen, Spid, $xxx) = unpack(SFLOCK STRUCT, $ [0]); return (Stype, Swhence, Sstart, Slen, Spid); } else { my (Stype, Swhence, Sstart, Slen, Spid) = @ ; return pack($FLOCK STRUCT, Stype, Swhence, Sstart, Slen, $pid, 0); # Структура flock для (Free)BSD; Начальное смещение •/ len = 0 означает блокировку до конца файла */ Владелец блокировки */ Тип блокировки: чтение/запись и т. д. */ Тип 1 start •/ й off t l start; /* # off t l len; /* # pid t l pid; /. # short l type; /* # short l whence, /* BEGIN { # По данным c2ph: typedef="q2 i s2", size=24 my SFLOCK STRUCT = 11 11 i s s; sub bsd flock { if (wantarray) { my (Sxxstart, Sstart, Sxxlen, Slen, Spid, Stype, Swhence) = unpack(SFLOCK STRUCT, S [0]); return (Stype, Swhence, Sstart, Slen, Spid); } else { my (Stype, Swhence, Sstart, Slen, Spid) = @ ; my (Sxxstart, Sxxlen) = (0,0); return pack($FLOCK STRUCT, Sxxstart, Sstart, Sxxlen, Slen, Spid, Stype, Swhence); ft Установить обработчик сигнала для потомков BEGIN { my Scalled = 0; sub genocide { exit if $called++; print "$$. Time to die, kiddies,\n" if $$ == Sprogenitor; my $]ob = getpgrpO; $SIG{INT} = •IGNORE: kill -2, $]ob If $]ob; # killpg(SIGINT, ]ob) 1 while wait > 0; print "$$ My turn\n" if $$ == Sprogenitor* exit; END { &genocide } # Синоним структуры fcntl на стадии компиляции BEGIN { for ($-0) { •struct flock = do /bsd/ && \&bsd flock II /Unux/ && \&linux flock II /sunos/ && \&sunos flock II die "unknown operating system $"0, bailing out"; Содержимое файлов Из всех решений UNIX самым (еииальпьш был выбор одного символа для перевода строки. Майк 0Де]щ, лишь с долей шутки Введение До революции UNIX всевозможные источники и нриемиики данных не имели 1П1чего общего. Чтобы две программы пообщались друг с другом, приходилось идти на невероятные ухиидрения и отправлять в мусор целые горы перфокарт. При виде этой компьютерной Вавилонской башни норой хотелось бросить программирование и подыскать себе менее болезненное хобби - например, податься в секту флаггелантов. В наши дни этот жестокий и нестанда])тный стиль программирования в основном ушел в прошлое. Современные операционные системы всячески стараются создать иллюзию, будто устройства ввода/вывода, сетевые подключения, управляющие данные процессов, другие программы, системные консоли и даже терминалы пользователей представляют собой абстрактные потоки байтов, именуемые файлами. Теперь можно легко написать программу, которая нисколько не заботится о том, откуда взялись ее входные данные и куда отправятся результаты. Поскольку чтение и запись данных осуществляется через простые байтовые потоки, любая программа может общаться с любой другой программой. Трудно переоценить всю элегантность и мощь такого подхода. Пользователи перестают зависеть от сборников магических заклинаний JCL (или СОМ) и могут собирать собственные нестандартные инструменты, используя простейшее иеренаправле-]ше ввода/вывода и конвейерную обработку. Интерпретация файлов как неструктурированных байтовых потоков однозначно определяет круг возможных операций. Вы можете читать и записывать последовательные блоки данных фиксированного размера в любом месте файла, увеличивая его размер при достижении конца. Чтение/занись блоков переменной длины (например, строк, абзацев и слов) реализуется в Perl на базе стандартной библиотеки ввода/вывода С. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 [ 90 ] 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |