在C中实现ls命令

时间:2016-09-27 06:54:30

标签: c directory system

我目前正在参加系统编程课程,教授为我们提供了ls命令实现的示例代码

#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
int main (int argc, char *argv[]) {

DIR *dp;
struct dirent *dirp;

if(argc ==1) dp = opendir ("./");

else dp = opendir(argv[1]);

while ((dirp = readdir(dp)) != NULL) printf("%s\n", dirp->d_name);

closedir(dp);
exit(0);
}

但是,当我尝试运行它时,它会输出消息&#34; segmentation fault&#34;。这是我所做的图像test 导致此消息的原因是什么?

1 个答案:

答案 0 :(得分:1)

您使用./a.out Assignment1.c调用您的程序。

然后你的程序确实是opendir("Assignment1.c");。由于"Assignment1.c"是文件而非目录,opendir会返回NULL

你天真地dirp = readdir(dp) dpNULL,导致分段错误。

您应该测试opendir的返回值,如果是NULL则显示错误消息。

阅读opendir man page