1、下载源码
http://apuebook.com/code3e.html
2、安装依赖库
sudo apt-get install libbsd-dev
3、解压、编译源码
tar xvf src.3e.tar.gz
cd apue.3e/
make
4、可以将相关头文件放在系统环境变量中
可以在apue.h 中添加附录B中的内容
cp ./include/apue.h /usr/include/
cp ./lib/libapue.a /usr/local/lib/
cp ./lib/libapue.a /usr/lib/
cp apueerror.h /usr/include/
5、可以开始学习书中的内容了
附录B,添加到apue.h中的内容
#include <errno.h>
#include <stdarg.h>
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, " ");
fflush(stdout); /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(NULL); /* flushes all stdio output streams */
}