关于Linux中ls命令的简单实现:
在学习《UNIX环境高级编程》这本书中,对图1-3程序进行了简单解释,欢迎大家留言讨论~
#include"apue.h"//是作者自定义的头文件
#include<dirent.h>//系统头文件
int main(int argc, char* argv[])
{
DIR * dp;//DIR是一个内部结构,通常用来保存当前被读取的目录有关的信息.(typedef)
struct dirent * dirp;
if(argc!=2)//如果没输入参数或者输入两个以上的参数
//err_sys("usage: ls direction name \n"); //Print a message and terminate.
//将erron映射为错误消息并输出,而此时系统并未实际发生错误,所以erron映射Success
err_quit("usage: ls direction name \n"); //Print a message and terminate.
//err_quit函数最后会真正退出程序exit(1),没有错误输出
/* 正确输入的情况下 */
if((dp=opendir(argv[1]))==NULL)//函数DIR*opendir(const char* pathname)打开目录,返回的就是DIR结构体的指针
err_sys("Can not open dictionary %s",argv[1]);
/* 成功打开的情况下 */
while((dirp=readdir(dp))!=NULL)
//struct dirent *readdir(DIR *dp);
//函数readdir将读取到的文件名存储在dirent结构体的d_name中,返回的是指向该目录下所有文件的dirent结构体。但是输出要一个一个地输出
printf("%s\n",dirp->d_name);
closedir(dp);
exit(0);
}
编译完之后执行生成的可执行文件a.out:
./a.out
进行提示:

./a.out /dev
输出以下内容:

这篇博客介绍了如何在Linux环境下实现简单的ls命令,通过C语言编程,利用dirent.h头文件中的opendir和readdir函数遍历并打印指定目录下的文件名。在正确输入目录名后,程序会逐行输出目录内的文件或子目录名称。

9912

被折叠的 条评论
为什么被折叠?



