Главная страница  Взаимодействие нетривиальных процессов 

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

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)



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

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.