簡體   English   中英

列出Ubuntu中目錄中的文件

[英]Listing files in Directory in Ubuntu

我正在嘗試列出當前目錄的父目錄中的文件,但是當我嘗試從終端執行該程序時,出現“分段錯誤”。我在做什么錯? 這是代碼:

#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;
}
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)手冊頁和Advanced Linux Programming書之類的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM