APUE2源码网址:
1. 修改Make.defines.linux文件中WKDIR为实际所存目录,我把apue.2e放在/opt/apue目录下,所以WKDIR=/opt/apue/apue.2e;
2. 用vim打开std目录下的linux.mk,即“vim ./std/linux.mk”将里面的nawk全部改为awk,可以使用这个命令“:%s/nawk/awk/g” (注意前面有冒号);
3. 打开include目录下的apue.h,即“./include/apue.h”在最后一行 #endif 前面添加一行 #include "error.h" (这一点非常重要,就是把 #include "erroc.h" 放在apue.h的倒数第二行);
4. 在我的机器上编译时,提示ARG_MAX未定义,可以这么修改。
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadtl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:
#include "apue.h";5. make下,在apue.2e/lib/目录下生成所需libapue.a库。
6. 编译并运行书中第一个程序myls.c。
编译使用以下命令:
- gcc -o myls myls.c /opt/apue/apue.2e/lib/libapue.a
运行./myls /root | more (用more命令分页显示)
结果如下:
源码如下:
- #include "apue.h"
-
#include <dirent.h>
-
-
int main(int argc, char *argv[])
-
{
-
DIR *dp;
-
struct dirent *dirp;
-
-
if(argc != 2)
-
err_quit("usage: ls directory_name");
-
-
if((dp = opendir(argv[1])) == NULL)
-
err_sys("can't open %s", argv[1]);
-
while((dirp = readdir(dp)) != NULL)
-
printf("%s\n", dirp->d_name);
-
-
closedir(dp);
-
-
exit(0);
-
-
}
阅读(2823) | 评论(0) | 转发(0) |