关闭

UNIX环境高级编程——第一个程序

标签: LinuxUnix环境高级编程
777人阅读 评论(2) 收藏 举报
分类:

       开始接触Linux了,在网上查了一大堆资料,都说《Unix环境高级编程》是Linux界的“圣经”,那我就从这本书开始学吧。

      该书的第一个程序即shell ls的实现就把我给难住了,因为头文件“apue.h”放在/usr/include/中还是会出错,在网上查了查资料,方法很麻烦,看着头晕,我这人就是有这毛病,怕麻烦。不过还好,找到一篇文章提供了一个简单方法,但是据说有个别的程序会出现重定义的情况,先就用这个方法配置吧,以后遇到问题再解决。方法如下:

     1. 下载src.2e.tar.gz  网址:www.apuebook.com

     2. 解压src.2e.tar.gz  在终端输入tar zxvf src.2e.tar.gz ,注意:src.2e.tar.gz应该放在当前目录下,我的是放在home下的

     3. 进入解压文件apue.2e/include, 打开apue.h,在最后一行的#endif /* _APUE_H */前添加 #include "error.h" 保存

     4. 将apue.h文件拷贝到/usr/include/下,在终端使用命令:sudo cp apue.2e/include/apue.h /usr/include/

     5.将apue.2e/lib下的error.c文件拷贝到/usr/include/下 ,在终端使用命令:sudo cp apue.2e/lib/error.c /usr/include/

好,至此大功基本告成,我们来测试一下,书上的源代码如下:

#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);
}

我用的是Emacs进行编译的,输入上述代码后,按Ctrl+s保存,然后按Esc+x进行命令输入,我们现在是要编译该程序,因此输入compile回车,然后输入gcc ls1.c回车。如出现如下提示,则编译成功,否则失败。

-*- mode: compilation; default-directory: "/home/cdj/CWorks/" -*-
Compilation started at Wed Dec  4 15:37:15

 gcc ls1.c

Compilation finished at Wed Dec  4 15:37:15


编译成功后,就可以运行该程序了,再次按Esc+x,输入shell,然后输入 ./a.out /dev回车,得到结果如下:

cdj@ubuntu:~/CWorks$ ./a.out /dev
.
..
vsock
dmmidi
midi
vmci
fb0
lp0
parport0
vcsa6
vcs6
...
接着输入书上的./a.out /var/spool/cron等命令。
至此,经过了大半天的折腾,终于跑起来了第一个程序。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:75111次
    • 积分:1124
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:15篇
    • 译文:0篇
    • 评论:34条
    最新评论