Чтение онлайн

ЖАНРЫ

UNIX: взаимодействие процессов

Стивенс Уильям Ричард

Шрифт:
Листинг В.1. Заголовочный файл unpipc.h

//lib/unpipc.h

1 /* Наш заголовочный файл. */

2 #ifndef __unpipc_h

3 #define __unpipc_h

4 #include "../config.h" /* параметры конфигурации ОС */

5 /* "../config.h" создается сценарием configure */

6 /* изменяя список директив #include, нужно изменять файлы

7 ../aclocal.m4 и ../configure.in.
чтобы работал сценарий configure */

8 #include <sys/types.h> /* базовые типы данных */

9 #include <sys/time.h> /* структура timeval{} для select */

10 #include <time.h> /* timespec{} для pselect */

11 #include <errno.h>

12 #include <fcntl.h> /* отключение блокировки */

13 #include <limits.h> /* PIPE_BUF */

14 #include <signal.h>

15 #include <stdio.h>

16 #include <stdlib.h>

17 #include <string.h>

18 #include <sys/stat.h> /* константы режима доступа к файлу S_xxx */

19 #include <unistd.h>

20 #include <sys/wait.h>

21 #ifdef HAVE_MQUEUE_H

22 #include <mqueue.h> /* очереди сообщений Posix */

23 #endif

24 #ifdef HAVE_SEMAPHORE_H

25 #include <semaphore.h> /* семафоры Posix */

26 #ifndef SEM_FAILED

27 #define SEM_FAILED ((sem_t *)(-1))

28 #endif

29 #endif

30 #ifdef HAVE_SYS_MMAN_H

31 #include <sys/mman.h> /* разделяемая память Posix */

32 #endif

33 #ifndef MAP_FAILED

34 #define MAP_FAILED ((void *)(-1))

35 #endif

36 #ifdef HAVE_SYS_IPC_H

37 #include <sys/ipc.h> /* System V IPC */

38 #endif

39 #ifdef HAVE_SYS_MSG_H

40 #include <sys/msg.h> /* очереди сообщений System V */

41 #endif

42 #ifdef HAVE_SYS_SEM_H

43 #ifdef __bsdi__

44 #undef HAVE_SYS_SEM_H /* тонкий момент: прототип semctl в BSDI's содержит ошибки*/

45 #else

46 #include <sys/sem.h> /* семафоры System V */

47 #endif

48 #ifndef HAVE_SEMUN_UNION /* $$.It semun$$ */

49 union semun { /* определение объединения для semctl */

50 int val;

51 struct semid_ds *buf;

52 unsigned short *array;

53 };

54 #endif

55 #endif /* HAVE_SYS_SEM_H */

56 #ifdef HAVE_SYS_SHM_H

57 #include <sys/shm.h> /*
разделяемая память System V */

58 #endif

59 #ifdef HAVE_SYS_SELECT_H

60 #include <sys/select.h> /* для удобства */

61 #endif

62 #ifdef HAVE_POLL_H

63 #include <poll.h> /* для удобства */

64 #endif

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_DOOR_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 /* Определяем bzero как макрос, если его нет в стандартной библиотеке С */

93 #ifndef HAVE_BZERO

94 #define bzero(ptr,n) memset(ptr, 0, n)

95 #endif

96 /* Posix.1g требует, чтобы INFTIM определялось в <poll.h>. но во многих системах эта

97 константа все еще определяется в <sys/stropts.h>. Нам не нужно подключать все

98 функции для работы с потоками, поэтому мы определяем INFTM здесь. Это стандартное

99 значение, но нет гарантий, что оно равно –1 */

Поделиться с друзьями: