Apue. h header file (Advanced Programming in unix environment)

Source: Internet
Author: User

Apue. h is a file written by the author. It contains common header files and is not provided by the system. This includes common header files and definitions of error handling functions. It is really convenient to use.

The content of apue. h is as follows:

#ifndef _APUE_H  #define _APUE_H    #define _XOPEN_SOURCE   600  /* Single UNIX Specification, Version 3 */    #include <sys/types.h>       /* some systems still require this */  #include <sys/stat.h>  #include <sys/termios.h>     /* for winsize */  #ifndef TIOCGWINSZ  #include <sys/ioctl.h>  #endif  #include <stdio.h>     /* for convenience */  #include <stdlib.h>    /* for convenience */  #include <stddef.h>    /* for offsetof */  #include <string.h>    /* for convenience */  #include <unistd.h>    /* for convenience */  #include <signal.h>    /* for SIG_ERR */      #define MAXLINE 4096               /* max line length */    /*  * Default file access permissions for new files.  */  #define FILE_MODE   (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)    /*  * Default permissions for new directories.  */  #define DIR_MODE    (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)    typedef void   Sigfunc(int);   /* for signal handlers */    #if defined(SIG_IGN) && !defined(SIG_ERR)  #define SIG_ERR ((Sigfunc *)-1)  #endif    #define min(a,b)     ((a) < (b) ? (a) : (b))  #define max(a,b)     ((a) > (b) ? (a) : (b))    /*  * Prototypes for our own functions.  */  char    *path_alloc(int *);              /* Figure 2.15 */  long     open_max(void);                 /* Figure 2.16 */  void     clr_fl(int, int);               /* Figure 3.11 */  void     set_fl(int, int);               /* Figure 3.11 */  void     pr_exit(int);                   /* Figure 8.5 */  void     pr_mask(const char *);          /* Figure 10.14 */  Sigfunc *signal_intr(int, Sigfunc *);    /* Figure 10.19 */    int      tty_cbreak(int);                /* Figure 18.20 */  int      tty_raw(int);                   /* Figure 18.20 */  int      tty_reset(int);                 /* Figure 18.20 */  void     tty_atexit(void);               /* Figure 18.20 */  #ifdef  ECHO    /* only if <termios.h>  has been included */  struct termios  *tty_termios(void);      /* Figure 18.20 */  #endif    void     sleep_us(unsigned int);             /* Exercise 14.6 */  ssize_t  readn(int, void *, size_t);         /* Figure 14.29 */  ssize_t  writen(int, const void *, size_t);  /* Figure 14.29 */  void     daemonize(const char *);            /* Figure 13.1 */    int      s_pipe(int *);                 /* Figures 17.6 and 17.13 */  int      recv_fd(int, ssize_t (*func)(int,                   const void *, size_t));/* Figures 17.21 and 17.23 */  int      send_fd(int, int);             /* Figures 17.20 and 17.22 */  int      send_err(int, int,                    const char *);        /* Figure 17.19 */  int      serv_listen(const char *);     /* Figures 17.10 and 17.15 */  int      serv_accept(int, uid_t *);     /* Figures 17.11 and 17.16 */    int      cli_conn(const char *);        /* Figures 17.12 and 17.17 */  int      buf_args(char *, int (*func)(int,                    char **));            /* Figure 17.32 */    int      ptym_open(char *, int);    /* Figures 19.8, 19.9, and 19.10 */  int      ptys_open(char *);         /* Figures 19.8, 19.9, and 19.10 */  #ifdef  TIOCGWINSZ  pid_t    pty_fork(int *, char *, int, const struct termios *,                    const struct winsize *);      /* Figure 19.11 */  #endif    int     lock_reg(int, int, int, off_t, int, off_t); /* Figure 14.5 */  #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))    pid_t   lock_test(int, int, off_t, int, off_t);     /* Figure 14.6 */    #define is_read_lockable(fd, offset, whence, len) \              (lock_test((fd), F_RDLCK, (offset), (whence), (len)) == 0)  #define is_write_lockable(fd, offset, whence, len) \              (lock_test((fd), F_WRLCK, (offset), (whence), (len)) == 0)    void    err_dump(const char *, ...);        /* Appendix B */  void    err_msg(const char *, ...);  void    err_quit(const char *, ...);  void    err_exit(int, const char *, ...);  void    err_ret(const char *, ...);  void    err_sys(const char *, ...);    void    log_msg(const char *, ...);         /* Appendix B */  void    log_open(const char *, int, int);  void    log_quit(const char *, ...);  void    log_ret(const char *, ...);  void    log_sys(const char *, ...);    void    TELL_WAIT(void);        /* parent/child from Section 8.9 */  void    TELL_PARENT(pid_t);  void    TELL_CHILD(pid_t);  void    WAIT_PARENT(void);  void    WAIT_CHILD(void);    #endif  /* _APUE_H */  

To use it, perform the following operations to complete the configuration.

Download the compressed src.tar.gzsource code package at http://www.apuebook.com.

1. decompress the package to the/home/user/directory.

2. Modify WKDIR =/home/xxx/apue.2e in Make. defines. linux to WKDIR =/home/user/apue.2e.

3. Return to the directory apue.2e, modify linux. mk, and change all nawk in to awk. You can use this command: % s/nawk/awk/g.

4. make

5. Copy/home/user/apue.2e/include/apue. h and/home/user/apue.2e/lib/error. c to the/usr/include directory.

Then you can easily use apue. h to compile the program of unix advanced environment programming.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.