在Ubuntu中的Directory中列出文件

时间:2012-10-20 14:10:18

标签: c linux ubuntu dir readdir

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

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

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;
}

2 个答案:

答案 0 :(得分:3)

dirpent=readdir(dirp) !=NULL

应该是

(dirpent = readdir(dirp)) != NULL

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

答案 1 :(得分: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)手册页和Advanced Linux Programming手册等文档。