📄 unpipc.h
字号:
/* include unpipch *//* Our own header. Tabs are set for 4 spaces, not 8 */#ifndef __unpipc_h#define __unpipc_h#include "../config.h" /* configuration options for current OS */ /* "../config.h" is generated by configure *//* If anything changes in the following list of #includes, must change ../aclocal.m4 and ../configure.in also, for configure's tests. */#include <sys/types.h> /* basic system data types */#include <sys/time.h> /* timeval{} for select() */#include <time.h> /* timespec{} for pselect() */#include <errno.h>#include <fcntl.h> /* for nonblocking */#include <limits.h> /* PIPE_BUF */#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/stat.h> /* for S_xxx file mode constants */#include <unistd.h>#include <sys/wait.h>#ifdef HAVE_MQUEUE_H# include <mqueue.h> /* Posix message queues */#endif#ifdef HAVE_SEMAPHORE_H# include <semaphore.h> /* Posix semaphores */#ifndef SEM_FAILED#define SEM_FAILED ((sem_t *)(-1))#endif#endif#ifdef HAVE_SYS_MMAN_H# include <sys/mman.h> /* Posix shared memory */#endif#ifndef MAP_FAILED#define MAP_FAILED ((void *)(-1))#endif#ifdef HAVE_SYS_IPC_H# include <sys/ipc.h> /* System V IPC */#endif#ifdef HAVE_SYS_MSG_H# include <sys/msg.h> /* System V message queues */#endif#ifdef HAVE_SYS_SEM_H#ifdef __bsdi__#undef HAVE_SYS_SEM_H /* hack: BSDI's semctl() prototype is wrong */#else# include <sys/sem.h> /* System V semaphores */#endif#ifndef HAVE_SEMUN_UNION/* $$.It semun$$ */union semun { /* define union for semctl() */ int val; struct semid_ds *buf; unsigned short *array;};#endif#endif /* HAVE_SYS_SEM_H */#ifdef HAVE_SYS_SHM_H# include <sys/shm.h> /* System V shared memory */#endif#ifdef HAVE_SYS_SELECT_H# include <sys/select.h> /* for convenience */#endif#ifdef HAVE_POLL_H# include <poll.h> /* for convenience */#endif#ifdef HAVE_STROPTS_H# include <stropts.h> /* for convenience */#endif#ifdef HAVE_STRINGS_H# include <strings.h> /* for convenience */#endif/* Next three headers are normally needed for socket/file ioctl's: * <sys/ioctl.h>, <sys/filio.h>, and <sys/sockio.h>. */#ifdef HAVE_SYS_IOCTL_H# include <sys/ioctl.h>#endif#ifdef HAVE_SYS_FILIO_H# include <sys/filio.h>#endif#ifdef HAVE_PTHREAD_H# include <pthread.h>#endif#ifdef HAVE_DOOR_H# include <door.h> /* Solaris doors API */#endif#ifdef HAVE_RPC_RPC_H#ifdef _PSX4_NSPACE_H_TS /* Digital Unix 4.0b hack, hack, hack */#undef SUCCESS#endif# include <rpc/rpc.h> /* Sun RPC */#endif/* Define bzero() as a macro if it's not in standard C library. */#ifndef HAVE_BZERO#define bzero(ptr,n) memset(ptr, 0, n)#endif/* Posix.1g requires that an #include of <poll.h> DefinE INFTIM, but many systems still DefinE it in <sys/stropts.h>. We don't want to include all the streams stuff if it's not needed, so we just DefinE INFTIM here. This is the standard value, but there's no guarantee it is -1. */#ifndef INFTIM#define INFTIM (-1) /* infinite poll timeout */#ifdef HAVE_POLL_H#define INFTIM_UNPH /* tell unpxti.h we defined it */#endif#endif/* Miscellaneous constants */#ifndef PATH_MAX /* should be in <limits.h> */#define PATH_MAX 1024 /* max # of characters in a pathname */#endif#define MAX_PATH 1024/* $$.ix [MAX_PATH]~constant,~definition~of$$ */#define MAXLINE 4096 /* max text line length *//* $$.ix [MAXLINE]~constant,~definition~of$$ *//* $$.ix [BUFFSIZE]~constant,~definition~of$$ */#define BUFFSIZE 8192 /* buffer size for reads and writes */#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) /* default permissions for new files *//* $$.ix [FILE_MODE]~constant,~definition~of$$ */#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH) /* default permissions for new directories *//* $$.ix [DIR_MODE]~constant,~definition~of$$ */#define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6) /* default permissions for new SV message queues *//* $$.ix [SVMSG_MODE]~constant,~definition~of$$ */#define SVSEM_MODE (SEM_R | SEM_A | SEM_R>>3 | SEM_R>>6) /* default permissions for new SV semaphores *//* $$.ix [SVSEM_MODE]~constant,~definition~of$$ */#define SVSHM_MODE (SHM_R | SHM_W | SHM_R>>3 | SHM_R>>6) /* default permissions for new SV shared memory *//* $$.ix [SVSHM_MODE]~constant,~definition~of$$ */typedef void Sigfunc(int); /* for signal handlers */#ifdef HAVE_SIGINFO_T_STRUCTtypedef void Sigfunc_rt(int, siginfo_t *, void *);#endif#define min(a,b) ((a) < (b) ? (a) : (b))#define max(a,b) ((a) > (b) ? (a) : (b))#ifndef HAVE_TIMESPEC_STRUCTstruct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* and nanoseconds */};/* $$.It timespec$$ *//* $$.Ib tv_sec$$ *//* $$.Ib tv_nsec$$ */#endif/* * In our wrappers for open(), mq_open(), and sem_open() we handle the * optional arguments using the va_XXX() macros. But one of the optional * arguments is of type "mode_t" and this breaks under BSD/OS because it * uses a 16-bit integer for this datatype. But when our wrapper function * is called, the compiler expands the 16-bit short integer to a 32-bit * integer. This breaks our call to va_arg(). All we can do is the * following hack. Other systems in addition to BSD/OS might have this * problem too ... */#ifdef __bsdi__#define va_mode_t int#else#define va_mode_t mode_t#endif/* $$.ix [va_mode_t]~datatype,~definition~of$$ */ /* our record locking macros */#define read_lock(fd, offset, whence, len) \ lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)#define readw_lock(fd, offset, whence, len) \ lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)#define write_lock(fd, offset, whence, len) \ lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)#define writew_lock(fd, offset, whence, len) \ lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)#define un_lock(fd, offset, whence, len) \ lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)#define is_read_lockable(fd, offset, whence, len) \ lock_test(fd, F_RDLCK, offset, whence, len)#define is_write_lockable(fd, offset, whence, len) \ lock_test(fd, F_WRLCK, offset, whence, len)/* end unpipch */#define Read_lock(fd, offset, whence, len) \ Lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)#define Readw_lock(fd, offset, whence, len) \ Lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)#define Write_lock(fd, offset, whence, len) \ Lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)#define Writew_lock(fd, offset, whence, len) \ Lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)#define Un_lock(fd, offset, whence, len) \ Lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)#define Is_read_lockable(fd, offset, whence, len) \ Lock_test(fd, F_RDLCK, offset, whence, len)#define Is_write_lockable(fd, offset, whence, len) \ Lock_test(fd, F_WRLCK, offset, whence, len) /* prototypes for our own library functions */void daemon_init(const char *, int);void daemon_inetd(const char *, int);char *gf_time(void);int lock_reg(int, int, int, off_t, int, off_t);pid_t lock_test(int, int, off_t, int, off_t);void *my_shm(size_t);char *px_ipc_name(const char *);int readable_timeo(int, int);ssize_t readline(int, void *, size_t);ssize_t readn(int, void *, size_t);int set_concurrency(int);Sigfunc *signal_intr(int, Sigfunc *);int sleep_us(unsigned int);int start_time(void);double stop_time(void);int touch(void *, int);void tv_sub(struct timeval *, struct timeval *);int writable_timeo(int, int);ssize_t writen(int, const void *, size_t);#ifndef HAVE_GETHOSTNAME_PROTOint gethostname(char *, int);#endif#ifndef HAVE_ISFDTYPE_PROTOint isfdtype(int, int);#endif#ifndef HAVE_PSELECT_PROTOint pselect(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *);#endif#ifndef HAVE_SNPRINTF_PROTOint snprintf(char *, size_t, const char *, ...);#endif /* prototypes for our own library wrapper functions */char *Gf_time(void);void Lock_reg(int, int, int, off_t, int, off_t);pid_t Lock_test(int, int, off_t, int, off_t);void *My_shm(size_t);char *Px_ipc_name(const char *);int Readable_timeo(int, int);ssize_t Readline(int, void *, size_t);ssize_t Readn(int, void *, size_t);void Set_concurrency(int);Sigfunc *Signal(int, Sigfunc *);Sigfunc *Signal_intr(int, Sigfunc *);#ifdef HAVE_SIGINFO_T_STRUCTSigfunc_rt *Signal_rt(int, Sigfunc_rt *);Sigfunc_rt *Signal_rt_intr(int, Sigfunc_rt *);#endifvoid Sleep_us(unsigned int);void Start_time(void);double Stop_time(void);void Touch(void *, int);int Writable_timeo(int, int);void Writen(int, void *, size_t); /* prototypes for our Unix wrapper functions */void *Calloc(size_t, size_t);void Close(int);void Dup2(int, int);int Fcntl(int, int, void *);pid_t Fork(void);long Fpathconf(int, int);void Fstat(int, struct stat *);key_t Ftok(const char *, int);void Ftruncate(int, off_t);int Getopt(int, char *const *, const char *);void Gettimeofday(struct timeval *, void *);int Ioctl(int, int, void *);void Kill(pid_t, int);off_t Lseek(int, off_t, int);void *Malloc(size_t);void Mkfifo(const char *, mode_t);void Mktemp(char *);void *Mmap(void *, size_t, int, int, int, off_t);void Munmap(void *, size_t);int Open(const char *, int, ...);long Pathconf(const char *, int);void Pipe(int *fds);ssize_t Read(int, void *, size_t);int Select(int, fd_set *, fd_set *, fd_set *, struct timeval *);void Sigaddset(sigset_t *, int);void Sigdelset(sigset_t *, int);void Sigemptyset(sigset_t *);void Sigfillset(sigset_t *);int Sigismember(const sigset_t *, int);void Sigpending(sigset_t *);void Sigprocmask(int, const sigset_t *, sigset_t *);#ifdef HAVE_SIGINFO_T_STRUCTvoid Sigqueue(pid_t, int, const union sigval);#endif#ifdef HAVE_SIGWAITvoid Sigwait(const sigset_t *, int *);#endifvoid Stat(const char *, struct stat *);char *Strdup(const char *);long Sysconf(int);void Sysctl(int *, u_int, void *, size_t *, void *, size_t);void Unlink(const char *);void *Valloc(size_t);pid_t Wait(int *);pid_t Waitpid(pid_t, int *, int);void Write(int, void *, size_t);#ifdef HAVE_MQUEUE_H /* 4Posix message queues */mqd_t Mq_open(const char *, int, ...);void Mq_close(mqd_t);void Mq_unlink(const char *pathname);void Mq_send(mqd_t, const char *, size_t, unsigned int);ssize_t Mq_receive(mqd_t, char *, size_t, unsigned int *);void Mq_notify(mqd_t, const struct sigevent *);void Mq_getattr(mqd_t, struct mq_attr *);void Mq_setattr(mqd_t, const struct mq_attr *, struct mq_attr *);#endif /* HAVE_MQUEUE_H */#ifdef HAVE_SEMAPHORE_H /* 4Posix semaphores */sem_t *Sem_open(const char *, int, ...);void Sem_close(sem_t *);void Sem_unlink(const char *);void Sem_init(sem_t *, int, unsigned int);void Sem_destroy(sem_t *);void Sem_wait(sem_t *);int Sem_trywait(sem_t *);void Sem_post(sem_t *);void Sem_getvalue(sem_t *, int *);#endif /* HAVE_SEMAPHORE_H *//* Note that <sys/mman.h> is defined on some systems that do not support * Posix shared memory (e.g., 4.4BSD), because this header predates Posix * and appears on any system that supports mmap(). Therefore we cannot * use this to determine whether the implementation supports Posix shared * memory or not. We use our own HAVE_SHM_OPEN_PROTO symbol. */#ifdef HAVE_SHM_OPEN_PROTO /* 4Posix shared memory */int Shm_open(const char *, int, mode_t);void Shm_unlink(const char *);#endif#ifdef HAVE_SYS_MSG_H /* 4System V message queues */int Msgget(key_t key, int flag);void Msgctl(int, int, struct msqid_ds *);void Msgsnd(int, const void *, size_t, int);ssize_t Msgrcv(int, void *, size_t, int, int);#endif /* HAVE_SYS_MSG_H */#ifdef HAVE_SYS_SEM_H /* 4System V semaphores */int Semget(key_t, int, int);int Semctl(int, int, int, ...);void Semop(int, struct sembuf *, size_t);#endif /* HAVE_SYS_SEM_H */#ifdef HAVE_SYS_SHM_H /* 4System V shared memory */int Shmget(key_t, size_t, int);void *Shmat(int, const void *, int);void Shmdt(const void *);void Shmctl(int, int, struct shmid_ds *);#endif /* HAVE_SYS_SHM_H */ /* prototypes for our stdio wrapper functions */void Fclose(FILE *);FILE *Fdopen(int, const char *);char *Fgets(char *, int, FILE *);FILE *Fopen(const char *, const char *);void Fputs(const char *, FILE *);FILE *Popen(const char *, const char *);int Pclose(FILE *);#ifdef HAVE_FATTACHvoid Fattach(int, const char *);#endif#ifdef HAVE_POLLint Poll(struct pollfd *, unsigned long, int);#endifvoid err_dump(const char *, ...);void err_msg(const char *, ...);void err_quit(const char *, ...);void err_ret(const char *, ...);void err_sys(const char *, ...); /* prototypes for our pthread wrapper functions */void Pthread_attr_init(pthread_attr_t *);void Pthread_attr_destroy(pthread_attr_t *);void Pthread_attr_setdetachstate(pthread_attr_t *, int);void Pthread_attr_setscope(pthread_attr_t *, int);void Pthread_create(pthread_t *, const pthread_attr_t *, void * (*)(void *), void *);void Pthread_join(pthread_t, void **);void Pthread_detach(pthread_t);void Pthread_kill(pthread_t, int);void Pthread_setcancelstate(int, int *);void Pthread_mutexattr_init(pthread_mutexattr_t *);void Pthread_mutexattr_destroy(pthread_mutexattr_t *);void Pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);void Pthread_mutex_init(pthread_mutex_t *, pthread_mutexattr_t *);void Pthread_mutex_destroy(pthread_mutex_t *);void Pthread_mutex_lock(pthread_mutex_t *);void Pthread_mutex_unlock(pthread_mutex_t *);void Pthread_condattr_init(pthread_condattr_t *);void Pthread_condattr_destroy(pthread_condattr_t *);void Pthread_condattr_setpshared(pthread_condattr_t *, int);void Pthread_cond_broadcast(pthread_cond_t *);void Pthread_cond_signal(pthread_cond_t *);void Pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);void Pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *, const struct timespec *);void Pthread_key_create(pthread_key_t *, void (*)(void *));void Pthread_setspecific(pthread_key_t, const void *);void Pthread_once(pthread_once_t *, void (*)(void));long pr_thread_id(pthread_t *);#ifdef HAVE_DOOR_H /* typedefs to simplify declarations */typedef void Door_server_proc(void *, char *, size_t, door_desc_t *, size_t);typedef void Door_create_proc(door_info_t *); /* prototypes for our doors wrapper functions */void Door_bind(int);void Door_call(int, door_arg_t *);int Door_create(Door_server_proc *, void *, u_int);void Door_cred(door_cred_t *);void Door_info(int, door_info_t *);void Door_return(char *, size_t, door_desc_t *, size_t);void Door_revoke(int);void Door_unbind(void);Door_create_proc *Door_server_create(Door_create_proc *);#endif /* HAVE_DOOR_H */#ifdef HAVE_RPC_RPC_HCLIENT *Clnt_create(const char *, u_long, u_long, const char *);void Clnt_control(CLIENT *, u_int, char *);#endif#endif /* __unpipc_h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -