apue.h源代码

 在Unix环境高级编程中,作者把一些常用的标准头文件,常量,函数集中在了 apue.h中。它的源码如下

  
  
  
  
  1. /* Our own header, to be included before all standard system headers */ 
  2.  
  3. #ifndef _APUE_H 
  4. #define _APUE_H 
  5.  
  6. #if defined(SOLARIS) 
  7. #define _XOPEN_SOURCE   500 /* Single UNIX Specification, Version 2  for Solaris 9 */ 
  8. #define CMSG_LEN(x) _CMSG_DATA_ALIGN(sizeof(struct cmsghdr)+(x)) 
  9. #elif !defined(BSD) 
  10. #define _XOPEN_SOURCE   600 /* Single UNIX Specification, Version 3 */ 
  11. #endif 
  12.  
  13. #include <sys/types.h>      /* some systems still require this */ 
  14. #include <sys/stat.h> 
  15. #include <sys/termios.h>    /* for winsize */ 
  16. #ifndef TIOCGWINSZ 
  17. #include <sys/ioctl.h> 
  18. #endif 
  19. #include <stdio.h>      /* for convenience */ 
  20. #include <stdlib.h>     /* for convenience */ 
  21. #include <stddef.h>     /* for offsetof */ 
  22. #include <string.h>     /* for convenience */ 
  23. #include <unistd.h>     /* for convenience */ 
  24. #include <signal.h>     /* for SIG_ERR */ 
  25.  
  26. #define MAXLINE 4096            /* max line length */ 
  27.  
  28. /* 
  29.  * Default file access permissions for new files. 
  30.  */ 
  31. #define FILE_MODE   (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) 
  32.  
  33. /* 
  34.  * Default permissions for new directories. 
  35.  */ 
  36. #define DIR_MODE    (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH) 
  37.  
  38. typedef void    Sigfunc(int);   /* for signal handlers */ 
  39.  
  40. #if defined(SIG_IGN) && !defined(SIG_ERR) 
  41. #define SIG_ERR ((Sigfunc *)-1) 
  42. #endif 
  43.  
  44. #define min(a,b)    ((a) < (b) ? (a) : (b)) 
  45. #define max(a,b)    ((a) > (b) ? (a) : (b)) 
  46.  
  47. /* 
  48.  * Prototypes for our own functions. 
  49.  */ 
  50. char    *path_alloc(int *);             /* {Prog pathalloc} */ 
  51. long     open_max(void);                /* {Prog openmax} */ 
  52. void     clr_fl(intint);              /* {Prog setfl} */ 
  53. void     set_fl(intint);              /* {Prog setfl} */ 
  54. void     pr_exit(int);                  /* {Prog prexit} */ 
  55. void     pr_mask(const char *);         /* {Prog prmask} */ 
  56. Sigfunc *signal_intr(int, Sigfunc *);   /* {Prog signal_intr_function} */ 
  57.  
  58. int      tty_cbreak(int);               /* {Prog raw} */ 
  59. int      tty_raw(int);                  /* {Prog raw} */ 
  60. int      tty_reset(int);                /* {Prog raw} */ 
  61. void     tty_atexit(void);              /* {Prog raw} */ 
  62. #ifdef  ECHO    /* only if <termios.h> has been included */ 
  63. struct termios  *tty_termios(void);     /* {Prog raw} */ 
  64. #endif 
  65.  
  66. void     sleep_us(unsigned int);            /* {Ex sleepus} */ 
  67. ssize_t  readn(intvoid *, size_t);        /* {Prog readn_writen} */ 
  68. ssize_t  writen(intconst void *, size_t); /* {Prog readn_writen} */ 
  69. void     daemonize(const char *);           /* {Prog daemoninit} */ 
  70.  
  71. int      s_pipe(int *);                 /* {Progs streams_spipe sock_spipe} */ 
  72. int      recv_fd(int, ssize_t (*func)(int
  73.                  const void *, size_t));/* {Progs recvfd_streams recvfd_sockets} */ 
  74. int      send_fd(intint);             /* {Progs sendfd_streams sendfd_sockets} */ 
  75. int      send_err(intint
  76.                   const char *);        /* {Prog senderr} */ 
  77. int      serv_listen(const char *);     /* {Progs servlisten_streams servlisten_sockets} */ 
  78. int      serv_accept(int, uid_t *);     /* {Progs servaccept_streams servaccept_sockets} */ 
  79. int      cli_conn(const char *);        /* {Progs cliconn_streams cliconn_sockets} */ 
  80. int      buf_args(char *, int (*func)(int
  81.                   char **));            /* {Prog bufargs} */ 
  82.  
  83. int      ptym_open(char *, int);    /* {Progs3 ptyopen_streams ptyopen_bsd ptyopen_linux} */ 
  84. int      ptys_open(char *);         /* {Progs3 ptyopen_streams ptyopen_bsd ptyopen_linux} */ 
  85. #ifdef  TIOCGWINSZ 
  86. pid_t    pty_fork(int *, char *, intconst struct termios *, 
  87.                   const struct winsize *);      /* {Prog ptyfork} */ 
  88. #endif 
  89.  
  90. int     lock_reg(intintint, off_t, int, off_t); /* {Prog lockreg} */ 
  91. #define read_lock(fd, offset, whence, len) \ 
  92.             lock_reg((fd), F_SETLK, F_RDLCK, (offset), (whence), (len)) 
  93. #define readw_lock(fd, offset, whence, len) \ 
  94.             lock_reg((fd), F_SETLKW, F_RDLCK, (offset), (whence), (len)) 
  95. #define write_lock(fd, offset, whence, len) \ 
  96.             lock_reg((fd), F_SETLK, F_WRLCK, (offset), (whence), (len)) 
  97. #define writew_lock(fd, offset, whence, len) \ 
  98.             lock_reg((fd), F_SETLKW, F_WRLCK, (offset), (whence), (len)) 
  99. #define un_lock(fd, offset, whence, len) \ 
  100.             lock_reg((fd), F_SETLK, F_UNLCK, (offset), (whence), (len)) 
  101.  
  102. pid_t   lock_test(intint, off_t, int, off_t);     /* {Prog locktest} */ 
  103.  
  104. #define is_read_lockable(fd, offset, whence, len) \ 
  105.             (lock_test((fd), F_RDLCK, (offset), (whence), (len)) == 0) 
  106. #define is_write_lockable(fd, offset, whence, len) \ 
  107.             (lock_test((fd), F_WRLCK, (offset), (whence), (len)) == 0) 
  108.  
  109. void    err_dump(const char *, ...);        /* {App misc_source} */ 
  110. void    err_msg(const char *, ...); 
  111. void    err_quit(const char *, ...); 
  112. void    err_exit(intconst char *, ...); 
  113. void    err_ret(const char *, ...); 
  114. void    err_sys(const char *, ...); 
  115.  
  116. void    log_msg(const char *, ...);         /* {App misc_source} */ 
  117. void    log_open(const char *, intint); 
  118. void    log_quit(const char *, ...); 
  119. void    log_ret(const char *, ...); 
  120. void    log_sys(const char *, ...); 
  121.  
  122. void    TELL_WAIT(void);        /* parent/child from {Sec race_conditions} */ 
  123. void    TELL_PARENT(pid_t); 
  124. void    TELL_CHILD(pid_t); 
  125. void    WAIT_PARENT(void); 
  126. void    WAIT_CHILD(void); 
  127.  
  128. #endif  /* _APUE_H */ 

 

你可能感兴趣的:(apue,apue.h)