c - 使用 dirent.h 在 C 中实现 ls 程序

标签 c ls dirent.h

我正在尝试使用 dirent 库实现 ls 程序。看来我的 DIR * mydir 是 <unspecified type>当我使用 gdb 进行调试时,它告诉我好像我没有正确包含 dirent.h header ,但我相信我正确地包含了所有必需的头文件。

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h> 
#include <sys/stat.h>

//Specifies whether or not to print hidden files
#define PRINT_HIDDEN 0

void readDirectory(char *dirString[]);

int main(int argc,char* argv[]) 
{
if(argc!=2)
{
printf("Usage: ./ls <directory>\n");
}

readDirectory(argv);    

return 0;
}

void readDirectory(char *dirString[])    
{
DIR *mydir; 
struct dirent *entry;
//Opening the directory and checking if valid
mydir = opendir(dirString[1]);  

if(mydir==NULL){
fprintf(stderr,"ls: cannot access %s: No such file or directory\n",
  dirString);
exit(EXIT_FAILURE);
}   
//Printing directories/files in specified directory
while((entry==readdir(mydir))!=NULL);
{
if(PRINT_HIDDEN)
{
  printf("%s ",entry->d_name);
}
else
{
  if(entry->d_name[0]!='.')
  {
    printf("%s ",entry->d_name);
  }
}
}
printf("\n");
//Closing the directory
closedir(mydir);
}

最佳答案

在糟糕的代码中隐藏着两个丑陋的错误:

while((entry==readdir(mydir))!=NULL);
{
    ...
}

改用这个:

while ((entry = readdir(mydir)) != NULL) {
    ...
}

entry 未初始化,使用 gcc -Wall 启用的警告进行编译会发现问题。 while 条件末尾的额外 ; 更难发现,请使用更一致的编程风格来避免此类错误。

关于c - 使用 dirent.h 在 C 中实现 ls 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29221224/

相关文章:

c++ - 如何将 char 复制到 char* vector 中

c++ - readdir 排除目录中的某些文件

c - 对具有可变数量参数的函数中的复数求和

c - mpi_byte 是如何工作的?

c - 在 C 中递归搜索目录中最大的文件

c - lstat : can't access files in another directory

c - 如果进退两难

c - getchar() 函数不起作用

bash - 如何将 `ls` 只有一层深?

c - 使用 C,我如何知道文件何时创建?