zoukankan      html  css  js  c++  java
  • UNIX环境高级编程的apue.h源码APUE

    /* Our own header, to be included before all standard system headers */

    #ifndef    _APUE_H
    #define    _APUE_H

    #if defined(SOLARIS)
    #define _XOPEN_SOURCE    500    /* Single UNIX Specification, Version 2  for Solaris 9 */
    #define CMSG_LEN(x)    _CMSG_DATA_ALIGN(sizeof(struct cmsghdr)+(x))
    #elif !defined(BSD)
    #define _XOPEN_SOURCE    600    /* Single UNIX Specification, Version 3 */
    #endif

    #include         /* some systems still require this */
    #include
    #include     /* for winsize */
    #ifndef TIOCGWINSZ
    #include
    #endif
    #include         /* for convenience */
    #include         /* for convenience */
    #include         /* for offsetof */
    #include         /* for convenience */
    #include         /* for convenience */
    #include         /* 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 *);                /* {Prog pathalloc} */
    long     open_max(void);                /* {Prog openmax} */
    void     clr_fl(int, int);                /* {Prog setfl} */
    void     set_fl(int, int);                /* {Prog setfl} */
    void     pr_exit(int);                    /* {Prog prexit} */
    void     pr_mask(const char *);            /* {Prog prmask} */
    Sigfunc    *signal_intr(int, Sigfunc *);    /* {Prog signal_intr_function} */

    int         tty_cbreak(int);                /* {Prog raw} */
    int         tty_raw(int);                    /* {Prog raw} */
    int         tty_reset(int);                /* {Prog raw} */
    void     tty_atexit(void);                /* {Prog raw} */
    #ifdef    ECHO    /* only if has been included */
    struct termios    *tty_termios(void);        /* {Prog raw} */
    #endif

    void     sleep_us(unsigned int);            /* {Ex sleepus} */
    ssize_t     readn(int, void *, size_t);        /* {Prog readn_writen} */
    ssize_t     writen(int, const void *, size_t);    /* {Prog readn_writen} */
    void     daemonize(const char *);            /* {Prog daemoninit} */

    int         s_pipe(int *);                    /* {Progs streams_spipe sock_spipe} */
    int         recv_fd(int, ssize_t (*func)(int,
                     const void *, size_t));/* {Progs recvfd_streams recvfd_sockets} */
    int         send_fd(int, int);                /* {Progs sendfd_streams sendfd_sockets} */
    int         send_err(int, int,
                      const char *);        /* {Prog senderr} */
    int         serv_listen(const char *);        /* {Progs servlisten_streams servlisten_sockets} */
    int         serv_accept(int, uid_t *);        /* {Progs servaccept_streams servaccept_sockets} */
    int         cli_conn(const char *);        /* {Progs cliconn_streams cliconn_sockets} */
    int         buf_args(char *, int (*func)(int,
                      char **));            /* {Prog bufargs} */

    int         ptym_open(char *, int);    /* {Progs3 ptyopen_streams ptyopen_bsd ptyopen_linux} */
    int         ptys_open(char *);            /* {Progs3 ptyopen_streams ptyopen_bsd ptyopen_linux} */
    #ifdef    TIOCGWINSZ
    pid_t     pty_fork(int *, char *, int, const struct termios *,
                      const struct winsize *);        /* {Prog ptyfork} */
    #endif

    int        lock_reg(int, int, int, off_t, int, off_t); /* {Prog lockreg} */
    #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);        /* {Prog locktest} */

    #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 *, ...);        /* {App misc_source} */
    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 *, ...);            /* {App misc_source} */
    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 {Sec race_conditions} */
    void    TELL_PARENT(pid_t);
    void    TELL_CHILD(pid_t);
    void    WAIT_PARENT(void);
    void    WAIT_CHILD(void);

    #endif    /* _APUE_H */

  • 相关阅读:
    关于使用lombok遇到的问题
    Android自定义View之旅(二)继承View实现自定义
    Android自定义View之旅(一)自定义View的几种方式
    Android中attr属性的类型
    Android Studio 4.0 新功能与优化
    WebView播放视频白屏、不能全屏问题解决
    Android配置Scheme使用浏览器唤起APP的方式,以及不生效问题解决
    Android获取的IMEI只有14位问题解决
    Android偶遇杂症合集(持续更新)
    AndroidKeystore密钥库系统,保证本地加密算法的密钥安全性
  • 原文地址:https://www.cnblogs.com/shaoguangleo/p/2805819.html
Copyright © 2011-2022 走看看