安装apue.h

安装apue.h
2017-05-30 13:59:09 水落 阅读数 551更多
分类专栏: Unix环境高级编程
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013961718/article/details/72809726
下载: src.3e.tar.gz http://www.apuebook.com/src.3e.tar.gz
解压: tar xvf src.3e.tar.gz
安装相应库: sudo apt-get install libbsd-dev
进入到apue.3e目录,执行: make
cp ./include/apue.h /usr/include/
cp ./lib/libapue.a /usr/local/lib/
编译时链接到相应库: gcc -o 1-3 1-3.c -lapue

apue.h是作者自己写的一个文件,包含了常用的头文件,系统不自带。其中包含了常用的头文件,以及出错处理函数的定义。使用起来确实很方便。

apue.h内容如下:

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 */

想要使用,还要进行下面操作,完成相关配置.

在http://www.apuebook.com/下载src.tar.gz源代码的压缩包。

1、解压至/home/user/目录下

2、修改 Make.defines.linux中的WKDIR=/home/xxx/apue.2e,为WKDIR=/home/user/apue.2e

3、返回至apue.2e目录下面,修改linux.mk,将里面的nawk全部改为awk,可以使用这个命令 :%s/nawk/awk/g

4、make

5、将/home/user/apue.2e/include/apue.h和/home/user/apue.2e/lib/error.c复制到/usr/include目录下

然后就可以方便的使用apue.h编译《unix高级环境编程》的的程序了
posted @ 2019-09-29 22:39  yasepix  阅读(270)  评论(0编辑  收藏  举报