• unpipc.h


    1. /* include unpipch */
    2. /* Our own header.  Tabs are set for 4 spaces, not 8 */
    3. #ifndef __unpipc_h
    4. #define __unpipc_h
    5. #include "../config.h" /* configuration options for current OS */
    6. /* "../config.h" is generated by configure */
    7. /* If anything changes in the following list of #includes, must change
    8.    ../aclocal.m4 and ../configure.in also, for configure's tests. */
    9. #include <sys/types.h> /* basic system data types */
    10. #include <sys/time.h> /* timeval{} for select() */
    11. #include <time.h> /* timespec{} for pselect() */
    12. #include <errno.h>
    13. #include <fcntl.h> /* for nonblocking */
    14. #include <limits.h> /* PIPE_BUF */
    15. #include <signal.h>
    16. #include <stdio.h>
    17. #include <stdlib.h>
    18. #include <string.h>
    19. #include <sys/stat.h> /* for S_xxx file mode constants */
    20. #include <unistd.h>
    21. #include <sys/wait.h>
    22. #ifdef HAVE_MQUEUE_H
    23. # include <mqueue.h> /* Posix message queues */
    24. #endif
    25. #ifdef HAVE_SEMAPHORE_H
    26. # include <semaphore.h> /* Posix semaphores */
    27. #ifndef SEM_FAILED
    28. #define SEM_FAILED ((sem_t *)(-1))
    29. #endif
    30. #endif
    31. #ifdef HAVE_SYS_MMAN_H
    32. # include <sys/mman.h> /* Posix shared memory */
    33. #endif
    34. #ifndef MAP_FAILED
    35. #define MAP_FAILED ((void *)(-1))
    36. #endif
    37. #ifdef HAVE_SYS_IPC_H
    38. # include <sys/ipc.h> /* System V IPC */
    39. #endif
    40. #ifdef HAVE_SYS_MSG_H
    41. # include <sys/msg.h> /* System V message queues */
    42. #endif
    43. #ifdef HAVE_SYS_SEM_H
    44. #ifdef __bsdi__
    45. #undef HAVE_SYS_SEM_H /* hack: BSDI's semctl() prototype is wrong */
    46. #else
    47. # include <sys/sem.h> /* System V semaphores */
    48. #endif
    49. #ifndef HAVE_SEMUN_UNION
    50. /* $$.It semun$$ */
    51. union semun { /* define union for semctl() */
    52.   int              val;
    53.   struct semid_ds *buf;
    54.   unsigned short  *array;
    55. };
    56. #endif
    57. #endif /* HAVE_SYS_SEM_H */
    58. #ifdef HAVE_SYS_SHM_H
    59. # include <sys/shm.h> /* System V shared memory */
    60. #endif
    61. #ifdef HAVE_SYS_SELECT_H
    62. # include <sys/select.h> /* for convenience */
    63. #endif
    64. #ifdef HAVE_POLL_H
    65. # include <poll.h> /* for convenience */
    66. #endif
    67. #ifdef HAVE_STROPTS_H
    68. # include <stropts.h> /* for convenience */
    69. #endif
    70. #ifdef HAVE_STRINGS_H
    71. # include <strings.h> /* for convenience */
    72. #endif
    73. /* Next three headers are normally needed for socket/file ioctl's:
    74.  * <sys/ioctl.h>, <sys/filio.h>, and <sys/sockio.h>.
    75.  */
    76. #ifdef HAVE_SYS_IOCTL_H
    77. # include <sys/ioctl.h>
    78. #endif
    79. #ifdef HAVE_SYS_FILIO_H
    80. # include <sys/filio.h>
    81. #endif
    82. #ifdef HAVE_PTHREAD_H
    83. # include <pthread.h>
    84. #endif
    85. #ifdef HAVE_DOOR_H
    86. # include <door.h> /* Solaris doors API */
    87. #endif
    88. #ifdef HAVE_RPC_RPC_H
    89. #ifdef _PSX4_NSPACE_H_TS /* Digital Unix 4.0b hack, hack, hack */
    90. #undef SUCCESS
    91. #endif
    92. # include <rpc/rpc.h> /* Sun RPC */
    93. #endif
    94. /* Define bzero() as a macro if it's not in standard C library. */
    95. #ifndef HAVE_BZERO
    96. #define bzero(ptr,n) memset(ptr, 0, n)
    97. #endif
    98. /* Posix.1g requires that an #include of <poll.h> DefinE INFTIM, but many
    99.    systems still DefinE it in <sys/stropts.h>.  We don't want to include
    100.    all the streams stuff if it's not needed, so we just DefinE INFTIM here.
    101.    This is the standard value, but there's no guarantee it is -1. */
    102. #ifndef INFTIM
    103. #define INFTIM          (-1)    /* infinite poll timeout */
    104. #ifdef HAVE_POLL_H
    105. #define INFTIM_UNPH /* tell unpxti.h we defined it */
    106. #endif
    107. #endif
    108. /* Miscellaneous constants */
    109. #ifndef PATH_MAX /* should be in <limits.h> */
    110. #define PATH_MAX 1024 /* max # of characters in a pathname */
    111. #endif
    112. #define MAX_PATH 1024
    113. /* $$.ix [MAX_PATH]~constant,~definition~of$$ */
    114. #define MAXLINE 4096 /* max text line length */
    115. /* $$.ix [MAXLINE]~constant,~definition~of$$ */
    116. /* $$.ix [BUFFSIZE]~constant,~definition~of$$ */
    117. #define BUFFSIZE 8192 /* buffer size for reads and writes */
    118. #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
    119. /* default permissions for new files */
    120. /* $$.ix [FILE_MODE]~constant,~definition~of$$ */
    121. #define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
    122. /* default permissions for new directories */
    123. /* $$.ix [DIR_MODE]~constant,~definition~of$$ */
    124. #define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6)
    125. /* default permissions for new SV message queues */
    126. /* $$.ix [SVMSG_MODE]~constant,~definition~of$$ */
    127. #define SVSEM_MODE (SEM_R | SEM_A | SEM_R>>3 | SEM_R>>6)
    128. /* default permissions for new SV semaphores */
    129. /* $$.ix [SVSEM_MODE]~constant,~definition~of$$ */
    130. #define SVSHM_MODE (SHM_R | SHM_W | SHM_R>>3 | SHM_R>>6)
    131. /* default permissions for new SV shared memory */
    132. /* $$.ix [SVSHM_MODE]~constant,~definition~of$$ */
    133. typedef void Sigfunc(int); /* for signal handlers */
    134. #ifdef HAVE_SIGINFO_T_STRUCT
    135. typedef void Sigfunc_rt(int, siginfo_t *, void *);
    136. #endif
    137. #define min(a,b) ((a) < (b) ? (a) : (b))
    138. #define max(a,b) ((a) > (b) ? (a) : (b))
    139. #ifndef HAVE_TIMESPEC_STRUCT
    140. struct timespec {
    141.   time_t tv_sec; /* seconds */
    142.   long tv_nsec; /* and nanoseconds */
    143. };
    144. /* $$.It timespec$$ */
    145. /* $$.Ib tv_sec$$ */
    146. /* $$.Ib tv_nsec$$ */
    147. #endif
    148. /*
    149.  * In our wrappers for open(), mq_open(), and sem_open() we handle the
    150.  * optional arguments using the va_XXX() macros.  But one of the optional
    151.  * arguments is of type "mode_t" and this breaks under BSD/OS because it
    152.  * uses a 16-bit integer for this datatype.  But when our wrapper function
    153.  * is called, the compiler expands the 16-bit short integer to a 32-bit
    154.  * integer.  This breaks our call to va_arg().  All we can do is the
    155.  * following hack.  Other systems in addition to BSD/OS might have this
    156.  * problem too ...
    157.  */
    158. #ifdef __bsdi__
    159. #define va_mode_t int
    160. #else
    161. #define va_mode_t mode_t
    162. #endif
    163. /* $$.ix [va_mode_t]~datatype,~definition~of$$ */
    164. /* our record locking macros */
    165. #define read_lock(fd, offset, whence, len) 
    166. lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)
    167. #define readw_lock(fd, offset, whence, len) 
    168. lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)
    169. #define write_lock(fd, offset, whence, len) 
    170. lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)
    171. #define writew_lock(fd, offset, whence, len) 
    172. lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)
    173. #define un_lock(fd, offset, whence, len) 
    174. lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)
    175. #define is_read_lockable(fd, offset, whence, len) 
    176. lock_test(fd, F_RDLCK, offset, whence, len)
    177. #define is_write_lockable(fd, offset, whence, len) 
    178. lock_test(fd, F_WRLCK, offset, whence, len)
    179. /* end unpipch */
    180. #define Read_lock(fd, offset, whence, len) 
    181. Lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)
    182. #define Readw_lock(fd, offset, whence, len) 
    183. Lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)
    184. #define Write_lock(fd, offset, whence, len) 
    185. Lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)
    186. #define Writew_lock(fd, offset, whence, len) 
    187. Lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)
    188. #define Un_lock(fd, offset, whence, len) 
    189. Lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)
    190. #define Is_read_lockable(fd, offset, whence, len) 
    191. Lock_test(fd, F_RDLCK, offset, whence, len)
    192. #define Is_write_lockable(fd, offset, whence, len) 
    193. Lock_test(fd, F_WRLCK, offset, whence, len)
    194. /* prototypes for our own library functions */
    195. void  daemon_init(const char *, int);
    196. void  daemon_inetd(const char *, int);
    197. char *gf_time(void);
    198. int  lock_reg(int, int, int, off_t, int, off_t);
    199. pid_t  lock_test(int, int, off_t, int, off_t);
    200. void *my_shm(size_t);
    201. char *px_ipc_name(const char *);
    202. int  readable_timeo(int, int);
    203. ssize_t  readline(int, void *, size_t);
    204. ssize_t  readn(int, void *, size_t);
    205. int  set_concurrency(int);
    206. Sigfunc *signal_intr(int, Sigfunc *);
    207. int    sleep_us(unsigned int);
    208. int  start_time(void);
    209. double  stop_time(void);
    210. int  touch(void *, int);
    211. void  tv_sub(struct timeval *, struct timeval *);
    212. int  writable_timeo(int, int);
    213. ssize_t  writen(int, const void *, size_t);
    214. #ifndef HAVE_GETHOSTNAME_PROTO
    215. int  gethostname(char *, int);
    216. #endif
    217. #ifndef HAVE_ISFDTYPE_PROTO
    218. int  isfdtype(int, int);
    219. #endif
    220. #ifndef HAVE_PSELECT_PROTO
    221. int  pselect(int, fd_set *, fd_set *, fd_set *,
    222.  const struct timespec *, const sigset_t *);
    223. #endif
    224. #ifndef HAVE_SNPRINTF_PROTO
    225. int  snprintf(char *, size_t, const char *, ...);
    226. #endif
    227. /* prototypes for our own library wrapper functions */
    228. char *Gf_time(void);
    229. void  Lock_reg(int, int, int, off_t, int, off_t);
    230. pid_t  Lock_test(int, int, off_t, int, off_t);
    231. void *My_shm(size_t);
    232. char *Px_ipc_name(const char *);
    233. int  Readable_timeo(int, int);
    234. ssize_t  Readline(int, void *, size_t);
    235. ssize_t  Readn(int, void *, size_t);
    236. void  Set_concurrency(int);
    237. Sigfunc *Signal(int, Sigfunc *);
    238. Sigfunc *Signal_intr(int, Sigfunc *);
    239. #ifdef HAVE_SIGINFO_T_STRUCT
    240. Sigfunc_rt *Signal_rt(int, Sigfunc_rt *);
    241. Sigfunc_rt *Signal_rt_intr(int, Sigfunc_rt *);
    242. #endif
    243. void  Sleep_us(unsigned int);
    244. void  Start_time(void);
    245. double  Stop_time(void);
    246. void  Touch(void *, int);
    247. int  Writable_timeo(int, int);
    248. void  Writen(int, void *, size_t);
    249. /* prototypes for our Unix wrapper functions */
    250. void *Calloc(size_t, size_t);
    251. void  Close(int);
    252. void  Dup2(int, int);
    253. int  Fcntl(int, int, void *);
    254. pid_t  Fork(void);
    255. long  Fpathconf(int, int);
    256. void  Fstat(int, struct stat *);
    257. key_t  Ftok(const char *, int);
    258. void  Ftruncate(int, off_t);
    259. int  Getopt(int, char *const *, const char *);
    260. void  Gettimeofday(struct timeval *, void *);
    261. int  Ioctl(int, int, void *);
    262. void  Kill(pid_t, int);
    263. off_t  Lseek(int, off_t, int);
    264. void *Malloc(size_t);
    265. void  Mkfifo(const char *, mode_t);
    266. void  Mktemp(char *);
    267. void *Mmap(void *, size_t, int, int, int, off_t);
    268. void  Munmap(void *, size_t);
    269. int  Open(const char *, int, ...);
    270. long  Pathconf(const char *, int);
    271. void  Pipe(int *fds);
    272. ssize_t  Read(int, void *, size_t);
    273. int  Select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
    274. void  Sigaddset(sigset_t *, int);
    275. void  Sigdelset(sigset_t *, int);
    276. void  Sigemptyset(sigset_t *);
    277. void  Sigfillset(sigset_t *);
    278. int  Sigismember(const sigset_t *, int);
    279. void  Sigpending(sigset_t *);
    280. void  Sigprocmask(int, const sigset_t *, sigset_t *);
    281. #ifdef HAVE_SIGINFO_T_STRUCT
    282. void  Sigqueue(pid_t, int, const union sigval);
    283. #endif
    284. #ifdef HAVE_SIGWAIT
    285. void  Sigwait(const sigset_t *, int *);
    286. #endif
    287. void  Stat(const char *, struct stat *);
    288. char *Strdup(const char *);
    289. long  Sysconf(int);
    290. void  Sysctl(int *, u_int, void *, size_t *, void *, size_t);
    291. void  Unlink(const char *);
    292. void *Valloc(size_t);
    293. pid_t  Wait(int *);
    294. pid_t  Waitpid(pid_t, int *, int);
    295. void  Write(int, void *, size_t);
    296. #ifdef HAVE_MQUEUE_H
    297. /* 4Posix message queues */
    298. mqd_t  Mq_open(const char *, int, ...);
    299. void  Mq_close(mqd_t);
    300. void  Mq_unlink(const char *pathname);
    301. void  Mq_send(mqd_t, const char *, size_t, unsigned int);
    302. ssize_t  Mq_receive(mqd_t, char *, size_t, unsigned int *);
    303. void  Mq_notify(mqd_t, const struct sigevent *);
    304. void  Mq_getattr(mqd_t, struct mq_attr *);
    305. void  Mq_setattr(mqd_t, const struct mq_attr *, struct mq_attr *);
    306. #endif /* HAVE_MQUEUE_H */
    307. #ifdef HAVE_SEMAPHORE_H
    308. /* 4Posix semaphores */
    309. sem_t *Sem_open(const char *, int, ...);
    310. void  Sem_close(sem_t *);
    311. void  Sem_unlink(const char *);
    312. void  Sem_init(sem_t *, int, unsigned int);
    313. void  Sem_destroy(sem_t *);
    314. void  Sem_wait(sem_t *);
    315. int  Sem_trywait(sem_t *);
    316. void  Sem_post(sem_t *);
    317. void  Sem_getvalue(sem_t *, int *);
    318. #endif /* HAVE_SEMAPHORE_H */
    319. /* Note that <sys/mman.h> is defined on some systems that do not support
    320.  * Posix shared memory (e.g., 4.4BSD), because this header predates Posix
    321.  * and appears on any system that supports mmap().  Therefore we cannot
    322.  * use this to determine whether the implementation supports Posix shared
    323.  * memory or not.  We use our own HAVE_SHM_OPEN_PROTO symbol.
    324.  */
    325. #ifdef HAVE_SHM_OPEN_PROTO
    326. /* 4Posix shared memory */
    327. int  Shm_open(const char *, int, mode_t);
    328. void  Shm_unlink(const char *);
    329. #endif
    330. #ifdef HAVE_SYS_MSG_H
    331. /* 4System V message queues */
    332. int  Msgget(key_t key, int flag);
    333. void  Msgctl(int, int, struct msqid_ds *);
    334. void  Msgsnd(int, const void *, size_t, int);
    335. ssize_t  Msgrcv(int, void *, size_t, int, int);
    336. #endif /* HAVE_SYS_MSG_H */
    337. #ifdef HAVE_SYS_SEM_H
    338. /* 4System V semaphores */
    339. int  Semget(key_t, int, int);
    340. int  Semctl(int, int, int, ...);
    341. void  Semop(int, struct sembuf *, size_t);
    342. #endif /* HAVE_SYS_SEM_H */
    343. #ifdef HAVE_SYS_SHM_H
    344. /* 4System V shared memory */
    345. int  Shmget(key_t, size_t, int);
    346. void *Shmat(int, const void *, int);
    347. void  Shmdt(const void *);
    348. void  Shmctl(int, int, struct shmid_ds *);
    349. #endif /* HAVE_SYS_SHM_H */
    350. /* prototypes for our stdio wrapper functions */
    351. void  Fclose(FILE *);
    352. FILE *Fdopen(int, const char *);
    353. char *Fgets(char *, int, FILE *);
    354. FILE *Fopen(const char *, const char *);
    355. void  Fputs(const char *, FILE *);
    356. FILE *Popen(const char *, const char *);
    357. int  Pclose(FILE *);
    358. #ifdef HAVE_FATTACH
    359. void  Fattach(int, const char *);
    360. #endif
    361. #ifdef HAVE_POLL
    362. int  Poll(struct pollfd *, unsigned long, int);
    363. #endif
    364. void  err_dump(const char *, ...);
    365. void  err_msg(const char *, ...);
    366. void  err_quit(const char *, ...);
    367. void  err_ret(const char *, ...);
    368. void  err_sys(const char *, ...);
    369. /* prototypes for our pthread wrapper functions */
    370. void  Pthread_attr_init(pthread_attr_t *);
    371. void  Pthread_attr_destroy(pthread_attr_t *);
    372. void  Pthread_attr_setdetachstate(pthread_attr_t *, int);
    373. void  Pthread_attr_setscope(pthread_attr_t *, int);
    374. void  Pthread_create(pthread_t *, const pthread_attr_t *,
    375.     void * (*)(void *), void *);
    376. void  Pthread_join(pthread_t, void **);
    377. void  Pthread_detach(pthread_t);
    378. void  Pthread_kill(pthread_t, int);
    379. void  Pthread_setcancelstate(int, int *);
    380. void  Pthread_mutexattr_init(pthread_mutexattr_t *);
    381. void  Pthread_mutexattr_destroy(pthread_mutexattr_t *);
    382. void  Pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
    383. void  Pthread_mutex_init(pthread_mutex_t *, pthread_mutexattr_t *);
    384. void  Pthread_mutex_destroy(pthread_mutex_t *);
    385. void  Pthread_mutex_lock(pthread_mutex_t *);
    386. void  Pthread_mutex_unlock(pthread_mutex_t *);
    387. void  Pthread_condattr_init(pthread_condattr_t *);
    388. void  Pthread_condattr_destroy(pthread_condattr_t *);
    389. void  Pthread_condattr_setpshared(pthread_condattr_t *, int);
    390. void  Pthread_cond_broadcast(pthread_cond_t *);
    391. void  Pthread_cond_signal(pthread_cond_t *);
    392. void  Pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
    393. void  Pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *,
    394.     const struct timespec *);
    395. void  Pthread_key_create(pthread_key_t *, void (*)(void *));
    396. void  Pthread_setspecific(pthread_key_t, const void *);
    397. void  Pthread_once(pthread_once_t *, void (*)(void));
    398. long  pr_thread_id(pthread_t *);
    399. #ifdef HAVE_DOOR_H
    400. /* typedefs to simplify declarations */
    401. typedef void  Door_server_proc(void *, char *, size_t, door_desc_t *, size_t);
    402. typedef void  Door_create_proc(door_info_t *);
    403. /* prototypes for our doors wrapper functions */
    404. void  Door_bind(int);
    405. void  Door_call(int, door_arg_t *);
    406. int  Door_create(Door_server_proc *, void *, u_int);
    407. void  Door_cred(door_cred_t *);
    408. void  Door_info(int, door_info_t *);
    409. void  Door_return(char *, size_t, door_desc_t *, size_t);
    410. void  Door_revoke(int);
    411. void  Door_unbind(void);
    412. Door_create_proc *Door_server_create(Door_create_proc *);
    413. #endif /* HAVE_DOOR_H */
    414. #ifdef HAVE_RPC_RPC_H
    415. CLIENT *Clnt_create(const char *, u_long, u_long, const char *);
    416. void  Clnt_control(CLIENT *, u_int, char *);
    417. #endif
    418. #endif /* __unpipc_h */
  • 相关阅读:
    Opencv学习笔记(六)SURF学习笔记
    各种加解密算法比較
    DWZ使用笔记
    Android反编译-逆天的反编译
    C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)
    Java 中队列的使用
    从svn下载项目后build path为灰色
    Java菜鸟学习笔记--面向对象篇(十六):Object类方法
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
  • 原文地址:https://www.cnblogs.com/wzf365/p/3896374.html
Copyright © 2020-2023  润新知