版权声明:转载请注明来源,谢谢。 https://blog.csdn.net/luke_sanjayzzzhong/article/details/88624619
前言
因为要上高级操作系统与网络编程,用的教材是《UNIX环境高级编程(第三版)》,所以在这里记录一下源码及编译过程。
源码地址
http://www.apuebook.com/
这里可以下到各个版本的源码。
环境配置
系统:Ubuntu16.04
- 源码下载之后,进行解压:
tar -zxvf src.3e.tar.gz
,得到一个文件夹。 - 安装依赖库
sudo apt-get install libbsd-dev
- 进入刚才解压的文件夹,命令行下输入
make
- 复制make出来的头文件及静态库
sudo cp ./include/apue.h /usr/include/ sudo cp ./lib/libapue.a /usr/local/lib/ sudo cp ./lib/libapue.a /usr/lib/
- 创建头文件
aupeerror.h
并将其复制到系统的头文件去
然后将这个文件copy到系统的include文件夹去:#include "apue.h" #include <errno.h> /* for definition of errno */ #include <stdarg.h> /* ISO C variable aruments */ static void err_doit(int, int, const char *, va_list); /* * Nonfatal error related to a system call. * Print a message and return. */ void err_ret(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap); } /* * Fatal error related to a system call. * Print a message and terminate. */ void err_sys(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap); exit(1); } /* * Fatal error unrelated to a system call. * Error code passed as explict parameter. * Print a message and terminate. */ void err_exit(int error, const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(1, error, fmt, ap); va_end(ap); exit(1); } /* * Fatal error related to a system call. * Print a message, dump core, and terminate. */ void err_dump(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap); abort(); /* dump core and terminate */ exit(1); /* shouldn't get here */ } /* * Nonfatal error unrelated to a system call. * Print a message and return. */ void err_msg(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(0, 0, fmt, ap); va_end(ap); } /* * Fatal error unrelated to a system call. * Print a message and terminate. */ void err_quit(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(0, 0, fmt, ap); va_end(ap); exit(1); } /* * Print a message and return to caller. * Caller specifies "errnoflag". */ static void err_doit(int errnoflag, int error, const char *fmt, va_list ap) { char buf[MAXLINE]; vsnprintf(buf, MAXLINE, fmt, ap); if (errnoflag) snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s", strerror(error)); strcat(buf, "\n"); fflush(stdout); /* in case stdout and stderr are the same */ fputs(buf, stderr); fflush(NULL); /* flushes all stdio output streams */ }
cp apueerror.h /usr/include/
- 编译
环境配置好了,只不过要在每个c文件中加上#include<aupeerror.h>
,这样就可以了。
gcc test.c -o test