• apue和error


     在做进程环境测试的时候,测试demo中出现了apue.h,而标准库中没有这个头文件和其中的函数定义,经查找需要在/usr/include中添加apue.h和error.c.原型可以去这个网站查找.  http://www.apuebook.com.

    1.  /src/include/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(int, int);                /* {Prog setfl} */
     53 void     set_fl(int, int);                /* {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(int, void *, size_t);        /* {Prog readn_writen} */
     68 ssize_t     writen(int, const 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(int, int);                /* {Progs sendfd_streams sendfd_sockets} */
     75 int         send_err(int, int,
     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 *, int, const struct termios *,
     87                   const struct winsize *);        /* {Prog ptyfork} */
     88 #endif
     89 
     90 int        lock_reg(int, int, int, 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(int, int, 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(int, const 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 *, int, int);
    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 #include "error.c"
    129 
    130 #endif    /* _APUE_H */

    2.  error.c /src/include/error.c

      1 #include "apue.h"
      2 #include <errno.h>        /* for definition of errno */
      3 #include <stdarg.h>        /* ISO C variable aruments */
      4 
      5 static void    err_doit(int, int, const char *, va_list);
      6 
      7 /*
      8  * Nonfatal error related to a system call.
      9  * Print a message and return.
     10  */
     11 void
     12 err_ret(const char *fmt, ...)
     13 {
     14     va_list        ap;
     15 
     16     va_start(ap, fmt);
     17     err_doit(1, errno, fmt, ap);
     18     va_end(ap);
     19 }
     20 
     21 /*
     22  * Fatal error related to a system call.
     23  * Print a message and terminate.
     24  */
     25 void
     26 err_sys(const char *fmt, ...)
     27 {
     28     va_list        ap;
     29 
     30     va_start(ap, fmt);
     31     err_doit(1, errno, fmt, ap);
     32     va_end(ap);
     33     exit(1);
     34 }
     35 
     36 /*
     37  * Fatal error unrelated to a system call.
     38  * Error code passed as explict parameter.
     39  * Print a message and terminate.
     40  */
     41 void
     42 err_exit(int error, const char *fmt, ...)
     43 {
     44     va_list        ap;
     45 
     46     va_start(ap, fmt);
     47     err_doit(1, error, fmt, ap);
     48     va_end(ap);
     49     exit(1);
     50 }
     51 
     52 /*
     53  * Fatal error related to a system call.
     54  * Print a message, dump core, and terminate.
     55  */
     56 void
     57 err_dump(const char *fmt, ...)
     58 {
     59     va_list        ap;
     60 
     61     va_start(ap, fmt);
     62     err_doit(1, errno, fmt, ap);
     63     va_end(ap);
     64     abort();        /* dump core and terminate */
     65     exit(1);        /* shouldn't get here */
     66 }
     67 
     68 /*
     69  * Nonfatal error unrelated to a system call.
     70  * Print a message and return.
     71  */
     72 void
     73 err_msg(const char *fmt, ...)
     74 {
     75     va_list        ap;
     76 
     77     va_start(ap, fmt);
     78     err_doit(0, 0, fmt, ap);
     79     va_end(ap);
     80 }
     81 
     82 /*
     83  * Fatal error unrelated to a system call.
     84  * Print a message and terminate.
     85  */
     86 void
     87 err_quit(const char *fmt, ...)
     88 {
     89     va_list        ap;
     90 
     91     va_start(ap, fmt);
     92     err_doit(0, 0, fmt, ap);
     93     va_end(ap);
     94     exit(1);
     95 }
     96 
     97 /*
     98  * Print a message and return to caller.
     99  * Caller specifies "errnoflag".
    100  */
    101 static void
    102 err_doit(int errnoflag, int error, const char *fmt, va_list ap)
    103 {
    104     char    buf[MAXLINE];
    105 
    106     vsnprintf(buf, MAXLINE, fmt, ap);
    107     if (errnoflag)
    108         snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s",
    109           strerror(error));
    110     strcat(buf, "
    ");
    111     fflush(stdout);        /* in case stdout and stderr are the same */
    112     fputs(buf, stderr);
    113     fflush(NULL);        /* flushes all stdio output streams */
    114 }

     

     

    wsksec@gmail.com Pressing on Toward the Goal
  • 相关阅读:
    Vue动画
    Vue的生命周期
    《JavaScript高级程序设计第三版》——细碎知识痛点整理(第六章)
    《JavaScript高级程序设计第三版》——细碎知识痛点整理(第五章)
    stylus(css预编译器)
    《JavaScript高级程序设计第三版》——细碎知识痛点整理(第三章到第四章)
    nodejs安装配置
    mac安装sudo pip install MySQL-python报错EnvironmentError: mysql_config not found解决方法
    2016
    chrome浏览器自动刷新问题
  • 原文地址:https://www.cnblogs.com/shuk-notes/p/4600923.html
Copyright © 2020-2023  润新知