106 /* ΠΡΠΎΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ */
107 #ifndef Π ΠΠ’Π_ΠΠΠ₯ /* Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π² <limits.h> */
108 #define PATH_MAX 1024 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° */
109 #endif
110 #define MAX_PATH 1024
111 #define MAXLINE 4096 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ */
112 #define BUFFSI2E 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 /* ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π½ΠΎΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ System V */
119 #define SVSEM_MODE (SEM_R | SEM_A | SEM_R>>3 | SEM_R>>6)
120 /* ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π½ΠΎΠ²ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² System V */
121 #define SVSHM_MODE (SHM_R | SHM_W | SHM_R>>3 | SHM_R>>6)
122 /* ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ System V */
123 typedef void Sigfunc(int); /* Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΈΠ³Π½Π°Π»ΠΎΠ² */
124 #ifdef HAVE_SIGINFO_T_STRUCT
125 typedef void Sigfunc_rt(int, siginfo_t*, void*);
126 #endif
127 #define min(a,b) ((a) < (b) ? (a) : (b))
128 #define 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 Π ΡΡΠ½ΠΊΡΠΈΡΡ -ΠΎΠ±Π΅ΡΡΠΊΠ°Ρ open(), mq_open(), sem_open() ΠΌΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ
137 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² va_XXX().
138 ΠΠ΄ΠΈΠ½ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ mode_t, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ
139 ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ Π² BSD/OS, Π³Π΄Π΅ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ
140 16-ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ ΡΠ΅Π»ΡΠ΅. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΠ±Π΅ΡΡΠΊΠΈ
141 ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ 16-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅
142 Π² 32-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅. ΠΠΎΡΡΠΎΠΌΡ ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎ.
143 ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
144 */
145 #ifdef __bsdi__
146 #define va_mode_t int
147 #else
148 #define va_mode_t mode_t
149 #endif
150 /* ΠΌΠ°ΠΊΡΠΎΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ */
151 #define read_lock(fd, offset, whence, len) \
152 lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)
153 #define readw_lock(fd, offset, whence, len) \
154 lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)
155 #define write_lock(fd, offset, whence, len) \
156 lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)
157 #define writew_lock(fd, offset, whence, len) \
158 lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)
159 #define un_lock(fd, offset, whence, len) \
160 lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)
161 #define is_read_lockable(fd, offset, whence, len) \
162 lock_test(fd, F_RDLCK, offset, whence, len)
163 #define is_write_lockable(fd, offset, whence, len) \
164 lock_test(fd. F_WRLCK, offset, whence, len)
B.2. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» config.h
ΠΠ»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΏpoΠ³ΡaΠΌΠΌ Π² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΡΡΠΈΠ»ΠΈΡΠ° GNU autoconf, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΌΠΈ. ΠΠ½Π° Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ftp://prep.ai.mit.edu/pub/gnu. Π£ΡΠΈΠ»ΠΈΡΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠ΅Π½Π°ΡΠΈΠΉ configure, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ Π·aΠ³ΡyΠ·ΠΈΡe ΠΏpoΠ³ΡaΠΌΠΌy ΠΈΠ· Π‘Π΅ΡΠΈ. ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ: ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ System V, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π»ΠΈ ΡΠΈΠΏ uint8_t, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ gethostname ΠΈ Ρ. Π΄. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» config.h, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π°ΡΠΈΠΌ unpipc.h ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ΅ΠΌΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ Π.2 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° config.h Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ Solaris 2.6 ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° gcc.
Π‘ΡΡΠΎΠΊΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ #define, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ Π.2. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» config.h Π΄Π»Ρ Solaris 2.6//sparc-sun-solaris2.6/config.h
1 /* config.h. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ configure. */
2 /* ΠΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» */
3 #define CPU_VENDOR_OS "sparc-sun-solaris2.6"
4 #define HAVE_DOOR_H 1 /* <door.h> */
5 #define HAVE_MQUEUE_H 1 /* <mqueue.h> */
6 #define HAVE_POLL_H 1 /*<poll.h>*/
7 #define HAVE_PTHREAD_H 1 /* <pthread.h> */
8 #define HAVE_RPC_RPC_H 1 /* <rpc/rpc.h> */
9 #define HAVE_SEMAPHORE_H 1 /* semaphore.h> */
10 #define HAVE_STRINGS_H 1 /* <strings.h> */
11 #define HAVE_SYS_FILIO_H 1 /* <sys/filio.h> */
12 #define HAVE_SYS_IOCTL_H 1 /* <sys/ioctl.h> */
13 #define HAVE_SYS_IPC_H 1 /* <sys/ipc.h> */
14 #define HAVE_SYS_MMAN_H 1 /* <sys/mman.h> */
15 #define HAVE_SYS_MSG_H 1 /* <sys/msg.h> */
16 #define HAVE_SYS_SEM_H 1 /* <sys/sem.h> */
17 #define HAVE_SYS_SHM_H 1 /* <sys/shm.h> */
18 #define HAVE_SYS_SELECT_H 1 /* <sys/select.h> */
19 /* #undef HAVE_SYS_SYSCTL_H */ /* <sys/sysctl.h> */
20 #define HAVE_SYS_TIME_H 1 /* <sys/time.h> */
21 /* ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°, Π΅ΡΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ <time.h> Π²ΠΌΠ΅ΡΡΠ΅ Ρ <sys/time.h> */
22 #define TIME_WITH_SYS_TIME 1
23 /* ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ, Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅ΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ */
24 #define HAVE_BZERO 1
25 #define HAVE_FATTACH 1
26 #define HAVE_POLL 1
27 /* #undef HAVE_PSELECT */
28 #define HAVE_SIGWAIT 1
29 #define HAVE_VALLOC 1
30 #define HAVE_VSNPRINTF 1
31 /* ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΅ΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ */
32 #define HAVE_GETHOSTNAME_PROTO 1 /* <unistd.h> */
33 #define HAVE_GETRUSAGE_PROTO 1 /* <sys/resource.h> */
34 /* #undef HAVE_PSELECT_PROTO */ /* <sys/select.h> */
35 #define HAVE SHM_OPEN_PROTO 1 /* <sys/mman.h> */
36 #define HAVE_SNPRINTF_PROTO 1 /* <stdio.h> */
37 #define HAVE_THR_SETCONCURRENCY_PROTO 1 /* <thread.h> */
38 /* ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ, Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ */
39 #define HAVE_SIGINFO_T_STRUCT 1 /* <signal.h> */
40 #define HAVE_TIMESPEC_STRUCT 1 /* <time.h> */
41 /* #undef HAVE_SEMUN_UNION */ /* <sys/sem.h> */
42 /* Π£ΡΡΡΠΎΠΉΡΡΠ²Π° */
43 #define HAVE_DEV_ZERO 1
44 /* ΠΠ»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ */
45 /* #undef int8_t */ /* <sys/types.h> */
46 /* #undef intl6_t */ /* <sys/types.h> */
47 /* #undef int32_t */ /* <sys/types.h> */
48 /* #undef uint8_t */ /* <sys/types.h> */
49 /* #undef uintl6_t */ /* <sys/types.h> */
50 /* #undef uint32_t */ /* <sys/types.n> */
51 /* #undef size_t */ /* <sys/types.h> */
52 /* #undef ssize_t */ /* <sys/types.h> */
53 #define POSIX_IPC_PREFIX "/"
54 #define RPCGEN_ANSIC 1 /* ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°, Π΅ΡΠ»ΠΈ rpcgen ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ βΠ‘ */
Π.Π. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΊΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΉ Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ:
if (ΡΡΠ»ΠΎΠ²ΠΈΠ΅_ΠΎΡΠΈΠ±ΠΊΠΈ) err_sys(ΡΠΎΡΠΌΠ°Ρ printf Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²);
Π²ΠΌΠ΅ΡΡΠΎ:
if (ΡΡΠ»ΠΎΠ²ΠΈΠ΅_ΠΎΡΠΈΠ±ΠΊΠΈ) {
char buff[200];
snprintf(buff, sizeof(buff), ΡΠΎΡΠΌΠ°Ρ printf Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²);
perror(buff);
exit(1);
}
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ANSI Π‘. Π ΡΠ°Π·Π΄Π΅Π»Π΅ 7.3 [ 11 ] Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ.
Π ΡΠ°Π±Π»ΠΈΡΠ΅ Π.1 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ daemon_proc ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΎΡ Π½ΡΠ»Ρ, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π΄Π΅ΠΌΠΎΠ½Ρ syslog Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ (ΡΠΌ. Π³Π»Π°Π²Ρ 12 [24]); Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ .
Π’Π°Π±Π»ΠΈΡΠ° Π.1. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ
Π€ΡΠ½ΠΊΡΠΈΡ strerror(errno)? ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅? Π£ΡΠΎΠ²Π΅Π½Ρ syslog err_dump ΠΠ° abort(); LOG_ERR err_msg ΠΠ΅Ρ return; LOG_INFO err_quit ΠΠ΅Ρ exit(1); LOG_ERR err_ret ΠΠ° return; LOG_INFO err_sys ΠΠ° exit(1); LOG_ERRΠ Π»ΠΈΡΡΠΈΠ½Π³Π΅ Π.3 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· ΡΠ°Π±Π». Π.1.
ΠΠΈΡΡΠΈΠ½Π³ Π.3. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ//lib/error.Ρ
1 #include "unpipc.h"
2 #include <stdarg.h> /* Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ANSI Π‘ */
3 #include <syslog.h> /* Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½Π° syslog() */
4 int daemon_proc; /* ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΎΡ Π½ΡΠ»Ρ daemon_init() */
5 static void err_doit(int, int, const char*, va_list);
6 /* ΠΠ΅ΡΠ°ΡΠ°Π»ΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅.
7 * ΠΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ. */
8 void
9 err_ret(const char *fmt, ...)
10 {
11 va_list Π°Ρ;
12 va_start(ap, fmt);
13 err_doit(1, LOG_INFO, fmt, ap);
14 va_end(ap);