第一个程序 myls 查找目录下文件

本文介绍了解决myls程序编译时遇到的找不到apue.h头文件及未声明函数等问题的过程。通过下载APUE2源代码并正确配置环境,最终成功编译并运行程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于是第一个程序,环境没有配置好,报错如下:

             myls.c:1:19: apue.h: No such file or directory
             myls.c: In function `main':
             myls.c:13: error: `NULL' undeclared (first use in this function)
             myls.c:13: error: (Each undeclared identifier is reported only once
             myls.c:13: error: for each function it appears in.)

 看编译后的错误信息,原来是找不到头文件apue.h。

下载,APUE2源代码下载:http://www.apuebook.com/src.tar.gz

解压:解压缩:tar -xzvf src.tar.gz

  将源代码解压后会出现目录apue.2e。将apue.2e下的include目录里面的apue.h文件拷贝至/usr/include。

                 cd  apue.2e所在目录(如 /home/chen)

                 cd  include

                 cp  apue.h /usr/include

说明:因为还要一个文件下面会提到(马上,^_^) ,在最后一行#endif    /* _APUE_H */前面添加一个声明:

         #include "myerr.h"  

再编译还是出问题:

             /tmp/ccBBopm0.o(.text+0x2b): In function `main':
            : undefined reference to `err_quit'
            /tmp/ccBBopm0.o(.text+0x5f): In function `main':
            : undefined reference to `err_sys'
            collect2: ld returned 1 exit status

     原来是找不到err_quit函数和err_sys函数的定义。

     其实这两个函数在《unix环境高级编程》一书的附录B中可以找到。

     在这里给出一种解决办法。

     转到目录/usr/include,创建文件myerr.h。将下列代码添加至此文件:

 

复制:

cp myerr.h /usr/include

编译myls程序:

gcc   -o myls myls.c

这次获得成功,运行:

./myls  /usr

出现如下结果

                                                 22:04:09

参考:http://haoshuang3394.javaeye.com/blog/418327

myls命令包含9个选项: (1myls : 在缺省选项的情况下,列出当前文件夹下的普通文件(不包含隐藏文件)。 例如:当前目录包含文件home1.c, home2.c, .home3.c,输入myls后,列出的文件名为home1.c, home2.c. (2) myls –a: 列出当前文件夹下的所有文件(包含隐藏文件)。 例如:当前目录包含文件home1.c、home2.c、.home3.c,输入myls -a后,列出所有的文件名为home1.c, home2.c, .home3.c. (3) myls –l: 列出当前文件夹下普通文件的详细信息,包括文件模式,文件链接数,文件所属用户,文件所属用户组,文件大小,文件最后修改时间,文件名。并且在最后一行显示该目录下所显示的文件文件块数。 例如:显示drwxr-xr-x 3 eli eli 4096 Nov 16 23:07 Desktop (4) myls -R 递归列出文件及其子文件。 例如:当前目录为home, 其中包含文件home1, home2, home3. 其中home1目录文件,包含文件home11, home12, home2不是目录文件,home3是目录文件,包含文件home31, home32。 输入myls –R后,列出的文件名为 ./home: home1 home2 home3 ./home/home1: home11 home12 ./home/home3: home31 home32. (5) myls –u: 列出当前文件夹下用户x的普通文件,若输入myls -u bb,则显示所属bb的普通文件。 例如:文件home1, home2, home3属于aa,文件tmp1, tmp2, tmp3属于bb, 则若输入myls –u aa, 则显示home1,home2,home3,若输入myls -u bb, 则显示tmp1,tmp2,tmp3。 (6) myls –S:文件进行排序,需要输入比较参数。 myls –S 的参数包括: time——按最近修改时间排序 name——按文件名的字典序排序 size——按文件的大小从小到大排序 link——按文件链接数从少到多排序 (7) myls -1: 将当前文件夹下的文件按照一行一个的方式显示。 (8) myls –s: 在各个文件开头显示这个文件文件块大小。 (9) myls /dirname: 显示/dirname下的文件。 编译 gcc main.c -o myls 执行 ./myls 可加若干参数,具体见上描述 程序并不完整,可能会有BUG,希望广大网友指点,交流~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值