Главная страница Взаимодействие нетривиальных процессов 21 #ifdef HAVE MQUEUE H 22 # include <mqueue.h> 23 #endif /* очереди сообщений Posix */ 24 #ifdef HAVE SEMAPHORE H 25 # include <semaphore.h> /* семафоры Posix */ 26 #ifndef SEMJAILED 27 #define SEMJAILED 28 #endif ((sem t *)(-l)) 29 #endif 30 #ifdef HAVEJYS MMANJ 31 # include <sys/mman.h> /* разделяемая память Posix */ 32 #endif 33 #ifndef MAPJAILED 34 #define MAPJAILED 35 #endif ((void *)(-!)) 36 #ifdef HAVEJYS IPCJ 37 # include <sys/ipc.h> 38 #endif /* System V IPC */ 39 #ifdef HAVEJYSJSGJ 40 # include <sys/msg.h> 41 #endif /* очереди сообщений System V */ 42 #ifdef 43 #ifdef 44 #undef HAVEJYSJEMJ bsdi HAVE SYS SEM H 45 #else 46 # include <sys/sem.h> 47 #endif /* тонкий момент: прототип semctlО в BSDIs содержит ошибки*/ /* семафоры System V */ 48 #ifndef HAVEJEMUNJNION 49 union semun { 50 int val: 51 struct semid ds *buf: 52 unsigned short *array: 53 }: 54 #endif /* $$.It semun$$ */ /* определение объединения для semctlО */ 55 #endif /* HAVEJYSJEMJ */ 56 #ifdef HAVEJYSJHMJ 57 # include <sys/shm,h> 58 #endif /* разделяемая память System V */ 59 #ifdef HAVEJYSJELECTJ 60 # include <sys/select.h> /* для удобства */ 61 #endif 62 #ifdef HAVE POLL H Л исти н г В. 1 (продолжение) 63 # include <poll.h> /* для удобства */ 64 #endi f 65 #ifdef HAVE STROPTS H 66 # include <stropts,h> /* для удобства */ 67 #endif 68 #ifdef HAVE STRINGS H 69 # include <strings.h> /* для удобства */ 70 #endif 71 /* Следующие три заголовочных файла нужны для ioctl файлов и сокетов: 72 * sys/ioctl.h>, <sys/filio.h>. и <sys/sockio.h>, 73 */ 74 #ifdef HAVE SYS IOCTL H 75 # include <sys/ioctl.h> 76 #endif 77 #ifdef HAVE SYS FILIO H 78 # include <sys/filio.h> 79 #endif 80 #ifdef HAVE PTHREAD H 81 # include <pthread.h> 82 #endif 83 #ifdef HAVE DmR H 84 # include <door.h> /* интерфейс дверей Solaris */ 85 #endif 86 #ifdef HAVE RPC RPC H 87 #ifdef PSX4 NSPACE H TS /* баги Digital Unix 4.0b */ 88 #undef SUCCESS 89 #endif 90 # include <rpc/rpc.h> /* Sun RPC */ 91 #endif 92 /* Определяем bzeroO как макрос, если его нет в стандартной библиотеке С */ 93 #ifndef HAVE BZERO 94 idefine bzerotptr.n) riemset(ptr, 0. n) 95 #endif 96 /* Posix.lg требует, чтобы INFTIM определялось в <poll,h>. но во многих системах эта 97 константа все еще определяется в <sys/stropts.h>. Нам не нужно подключать все 98 функции для работы с потоками, поэтому мы определяем INFTM здесь. Это стандартное 99 значение, но нет гарантий, что оно равно -1 */ 100 #ifndef INFTIM 101 #define INFTIM (-1) /* неограниченное время опроса */ 102 #ifdef HAVE POLL H 103 Idefine INFTIM UNPH /* чтобы из файла unpxti.h узнать, что константа определена */ 104 #endif 105 #endif 106 /* Прочие константы */ 107 #ifndef РАТН МАХ /* должна быть в <liniits.h> */ 108 #define РАТН МАХ 1024 /* максимальное количество символов в полном имени файла */ 109 #endif 110 #define МАХ РАТН 1024 111 #define MAXLINE 4096 /* максимальная длина строки */ 112 #define BUFFSIZE 8192 /* обьем буфера чтения и записи */ 113 #define FILE MODE (S IRUSR S IWUSR S IRGRP S IROTH) 114 /* разрешения по умолчанию для новых файлов */ 115 #define DIR MODE (FILE MODE S IXUSR S IXGRP S IXOTH) 116 /* разрешения по умолчанию для новых каталогов */ 117 #define SVMSG MODE (MSG R MSG W MSG R 3 MSG R 6) 118 /* разрешения no умолчанию для новых очередей сообщений System V */ 119 Idefine SVSEM MODE (SEM R SEM A SEM R 3 SEM R 6) 120 /* разрешения no умолчанию для новых семафоров System V */ 121 #define SVSHM MODE (SHM R SHM W SHM R 3 SHM R 6) 122 /* разрешения no умолчанию для новой разделяемой памяти System V */ 123 typedef void Sigfunc(int): /* для обработчиков сигналов */ 124 #ifdef 125 typedef 126 #endif 127 #define 128 #define HAV£ SIGINFO T STRUCT void Sigfunc rt(int, siginfo t *. void *); minta.b) ((a) < (b) ? (a) ; (b)) max(a,b) ((a) > (b) ? (a) : (b)) 129 #ifndef HAVE TIMESPEC STRUCT 130 struct timespec { 131 time t tv sec: /* секунды */ 132 long tv nsec: /* и наносекунды */ 133 }: 134 #endif 135 /* 136 В функциях-обертках openO, mq open(), sem open() мы обрабатываем 137 дополнительные аргументы с помощью макросов va XXX(), 138 Один из аргументов имеет тип mode t, что приводит 139 к ошибке в BSD/OS, где для этого типа используются 140 16-разрядные целые. При вызове обертки 141 компилятор преобразовывает 16-разрядное целое 142 в 32-разрядное. Поэтому и необходимо то. 143 что сделано ниже. 144 */ 145 146 147 148 149 150 151 152 153 154 155 156 #ifdef #define #e1se #define #endi f #define #define #define bsdi va mode t va mode t mode t /* макросы блокировки записей */ readJock(fd. offset, whence, Ten) \ 1ock reg(fd, F SETLK, F ROLCK. offset, whence, 1en) readw lock(fd. offset, whence, len) \ lock reg(fd, F SETLKW, F RDLCK, offset, whence, len) writejocktfd. offset, whence, len) \ lock reg(fd. FJETLK. F WRLCK, offset, whence, len)
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |