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

原创 2013年12月04日 14:52:58

       开始接触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等命令。
至此,经过了大半天的折腾,终于跑起来了第一个程序。

相关文章推荐

UNIX环境高级编程源代码配置

声明:本文章转载自:http://blog.sina.com.cn/s/blog_967e337b01011nix.html (一) Linux环境: Linux localhost.local...

《UNIX环境高级编程》 —— 书中实例编译、运行

想认真学习《UNIX环境高级编程》的人士可能都想把书中的实例给敲一遍,运行看一下效果。但对于新手来说,可能会有一定的困难,因为例子中用到的头文件和一些函数不知道在哪里,编译可能也会出问题。这边文章就是...

《UNIX环境高级编程》 —— 书中实例编译、运行

想认真学习《UNIX环境高级编程》的人士可能都想把书中的实例给敲一遍,运行看一下效果。但对于新手来说,可能会有一定的困难,因为例子中用到的头文件和一些函数不知道在哪里,编译可能也会出问题。这边文章就是...

2017阿里内推实习生面试经历(已获得offer)

阿里电话一面: 问题1:堆和栈的区别? 1 堆大栈小(针对虚拟地址空间)。例如深层次的递归可能造成栈溢出。 2 动态分配内存时要栈要快于堆。栈的分配函数被定义成内联函数,并且栈分配内存时仅仅需要修改栈...

Unix环境高级编程apue.h文件问题,与运行第一个程序

《Unix环境高级编程》非常详细的介绍了在UNix\linux环境下用C编程的重要问题。本文详细介绍了从下载源文件到修改几个配置文件,到解决找不到apue.h文件的问题,再到解决编译时的err_sys...

UNIX环境高级编程第二版第一个程序运行成功

开始看《UNIX环境高级编程 d

linux下运行《UNIX环境高级编程》的第一个程序时源码编译出错的处理方法

前几天买了《UNIX环境高级编程》这本书,想好好学习下linux的编程。谁知道看到第一个列出指定目录的内容的那个例子,其实就是shell中 ls 的内容,打好代码要运行时一直出问题。后来在网上找了挺多...

APUE(UNIX环境高级编程)程序架构编译分析(Makefile)

环境: Ubuntu10.04 gcc 4.4.3 特别标注: 有些网站转载我的文章不标明出处,并且转载不到位,没有把相应的链接一块转过去,比如说下载链接或相关...

《Unix环境高级编程》:将文件复制到分页程序

《Unix环境高级编程》这本书附带了许多短小精美的小程序,我在阅读此书的时候,将书上的代码按照自己的理解重写了一遍(大部分是抄书上的),加深一下自己的理解(纯看书太困了,呵呵)。此例子在Ubuntu1...

C/C++程序的内存布局---来自unix环境高级编程

1,正文段。这是由C P U执行的机器指令部分。通常,正文段是可共享的,所以即使执行的程序(如文本编辑程序、C编译程序、s h e l l等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UNIX环境高级编程——第一个程序
举报原因:
原因补充:

(最多只允许输入30个字)