Chinaunix首页 | 论坛 | 博客
  • 博客访问: 458049
  • 博文数量: 40
  • 博客积分: 1410
  • 博客等级: 军士长
  • 技术积分: 1396
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-22 19:26
个人简介

嵌入式系统工程师,从事视频、图像、网络、虚拟化等方面的底层软件开发与优化。

文章存档

2014年(4)

2013年(10)

2012年(14)

2011年(12)

分类: LINUX

2011-05-10 19:11:21

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。
编译使用以下命令:
  1. gcc -o myls myls.c /opt/apue/apue.2e/lib/libapue.a
运行./myls /root | more (用more命令分页显示)
结果如下:
源码如下:
  1. #include "apue.h"
  2. #include <dirent.h>

  3. int main(int argc, char *argv[])
  4. {
  5.         DIR *dp;
  6.         struct dirent *dirp;

  7.         if(argc != 2)
  8.                 err_quit("usage: ls directory_name");

  9.         if((dp = opendir(argv[1])) == NULL)
  10.                 err_sys("can't open %s", argv[1]);
  11.         while((dirp = readdir(dp)) != NULL)
  12.                 printf("%s\n", dirp->d_name);

  13.         closedir(dp);

  14.         exit(0);

  15. }




阅读(2816) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~