apue.h是作者自定义的一个头文件,包括程序所需的常用头文件及出错处理函数。所以因该将它放入系统头文件中(Linux下是 /usr/include),这样gcc编译器就可以找到它了。
先去那个网站downlowd apue 的tar.gz包,然后解压至电脑中的某个目录,比如我的是在/home/user/下,然后进入解压目录 apue.2e,修改Make.defines.linux中 的WKDIR=/home/xxx/apue.2e,为WKDIR=/home/user /apue.2e,这就是我们将要make的工作目录(存放apue.2e的目录),然后再进入std目录,用vi打开linux.mk,将里面的 nawk全部改为awk,可以使用这个命令 :1.$s/nawk/awk/g (注意前面有冒号)
然后(重点注意)
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv3.c和getenv1.c,添加一行:#include "apue.h"
然后 make
然后按下面的步骤做
1. 超级用户权限登入 #cd /usr/include
2. 将apue.h和error.c两个文件copy到该目录下。(apue.h位于 your_apue_path/inlcude ; error.c位于your_apue_path/lib )
以我的了路径为例:
#cp /home/ucfree/apue.2e/inlcude/apue.h .
#cp /home/ucfree/apue.2e/lib/error.c . (实现apue.h中的出错处理函数)
3. 编辑apue.h
#sudo vim apue.h
在最后一行 #endif 前面添加一行 #include “error.c”
:wq 保存,退出.
4.err_quit跟err_sys是作者自己定义的错误处理函数,需要单独定义头文件
在/usr/include 下新建一个名为myerr.h的文件
拷贝下边的内容到myerr.h(其实此头文件在原书的附录B中)
QUOTE:#include "apue.h"
#include
#include
static void err_doit(int, int, const char *, va_list);
void
err_ret(const char *fmt, ...)
{
}
void
err_sys(const char *fmt, ...)
{
}
void
err_exit(int error, const char *fmt, ...)
{
}
void
err_dump(const char *fmt, ...)
{
}
void
err_msg(const char *fmt, ...)
{
}
void
err_quit(const char *fmt, ...)
{
}
static void
err_doit(int errnoflag, int error, const char *fmt, va_list ap)
{
}
然后在你需要使用这几种错误处理函数的程序源代码里加入
#include "myerr.h"
这样你就可以运行下载的apue程序了.
使用源代码:
1、知道源代码的软连接与位置
sdoning@ubuntu:~/apue/apue.2e$ ll fig1.3
lrwxrwxrwx 1 sdoning sdoning 10 2010-11-27 07:27 fig1.3 -> file/ls1.c
2、进入file目录
sdoning@ubuntu:~/apue/apue.2e/file$ ls
access
access.c
cdpwd
cdpwd.c
changemod
changemod.c
devrdev
3、运行
sdoning@ubuntu:~/apue/apue.2e/file$ ./ls1 /home
..
sdoning
.