在Ubuntu中的Directory中列出文件

我试图列出当前目录的父目录中的文件,但是当我尝试从终端执行此程序时,我得到分段错误..我做错了什么? 这是代码:

#include  #include  #include  int main(int argc, char *argv[]) { struct dirent *dirpent; DIR *dirp; if(argc!=2) { printf("Cant continue with the program\n"); return 0; } dirp= opendir(argv[1]); if(dirp) { while(dirpent=readdir(dirp) !=NULL) printf("%s\n",dirpent->d_name); closedir(dirp); } return 0; } 

 dirpent=readdir(dirp) !=NULL 

应该

 (dirpent = readdir(dirp)) != NULL 

您当前的表达式被解析为dirpent = (readdir(dirp) != NULL) ,它将dirpent设置为0或1。

如果你用indent rd.c缩进你的程序然后使用gcc -Wall -g rd.c -o rd编译你的程序你得到

  rd.c: In function 'main': rd.c:21:22: warning: assignment makes pointer from integer without a cast [enabled by default] rd.c:21:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses] 

所以你忘了括号,你的while应该是

  while((dirpent=readdir(dirp)) !=NULL) 

在提出问题之前,请用所有警告编译你的程序(并在它们全部消失之前进行改进)。 使用gdb调试器(及其bt命令)找出程序与SIGSEGV崩溃的原因。

不要忘记仔细阅读readdir(3)手册页和高级Linux编程书等文档。