在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编程书等文档。