在做进程环境测试的时候,测试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, "\n");
111 fflush(stdout); /* in case stdout and stderr are the same */
112 fputs(buf, stderr);
113 fflush(NULL); /* flushes all stdio output streams */
114 }

apue和error的更多相关文章

  1. multiple definition of `err_sys' 《UNIX环境高级编程》

    本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...

  2. [APUE]进程控制(上)

    一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...

  3. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  4. APUE中fcntl.h的使用及O_SYNC在Mac与Ubuntu下的测试

    此部分测试涉及到APUE V3中,第三章的图3-12到图3-14. 通过fcntl.h提供的功能,修改fd的文件属性,本处增加O_SYNC功能,并测试其效果. 本文涉及代码: tree ch3 ch3 ...

  5. APUE fig 1.10示例代码的完善--对提示符及输入回车的优化

    APUE 第3版第15页的shell2.c示例程序,运行效果如下: gcc ol.shell.c -o origin_shell ./origin_shell % date 2015年12月13日 星 ...

  6. 关于apue.3e中apue.h的使用

    关于apue.3e中apue.h的使用 近来要学一遍APUE第三版,并于此开博做为记录. 先下载源文件: # url: http://http//www.apuebook.com/code3e.htm ...

  7. APUE 习题3-2 实现dup2,要求不使用fcntl函数。

    int mydup2(int oldfd, int newfd) {     int tfd = 0;     if (newfd < 0)     {         err_sys(&quo ...

  8. APUE学习--第三版apue编译

    第三版apue编译:     1. 首先在  http://www.apuebook.com/   下载源码解压:      tar zxvf src.3e.tar.gz 看完Readme可知,直接执 ...

  9. APUE环境配置

    1.到http://www.apuebook.com/选择相应的版本下载源码,我的是2013版的 2.将apue.h拷到/usr/include目录下 3.将error.c拷到源文件下,编译的时候带上 ...

随机推荐

  1. 0-9、a-z、A-Z 随机数

    MXS&Vincene  ─╄OvЁ  &0000006 ─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...

  2. 鸟哥的linux私房菜学习记录之认识系统服务(daemons)

  3. 161201、常用 SQL Server 规范集锦

    常见的字段类型选择   1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 4.自增长标识建议采用bigi ...

  4. php blowfish加密解密具体算法

    PHP Blowfish 算法的加密解密,供大家参考,具体内容如下<?php/*** php blowfish 算法* Class blowfish*/class blowfish{/*** b ...

  5. ectouch第三讲之加载调用机制

    加载与调用机制:         当地址栏键入/mobile,就会加载入口文件index.php:从入口文件里面会调用EcTouch.php公共入口文件,当进入公共入口文件,会定义一些变量,然后加载公 ...

  6. CodeIgniter配置之config

    配置说明 $config['language']:指定项目语言包.需要注意的时Codeigniter自带的类库错误提示语言包位于/system/language/english/目录下,当这里配置非e ...

  7. ecshop后台通过ajax搜索原理

    ecshop的搜索其实是功能十分强大的,但是ecshop搜索功能前台和后台还不大一样,前台主要是通过get方式,提交的url进行分页,而在ecshop的后台,则是接受表单的搜索条件,然后通过js发布到 ...

  8. bootstrap 列表 表格 表单 复选 单选 多选 输入框组

    一.列表 ul li 二.表格 table  (http://www.runoob.com/bootstrap/bootstrap-tables.html) 1. 基本表格 <table cla ...

  9. jquery相关校验以及jquery其他知识总结

    //************jquery校验**********/ //数字校验(整数)function isDigit(str) { var patrn=/^[0-9]*$/; return pat ...

  10. Android WebView如何加载assets下的html文件

    项目需求:将html文件以及所用到的图片都放在 assets/html/ 目录下.然后在页面上通过WebView来显示 直接付上代码: private void readHtmlFormAssets( ...