【发布时间】:2015-05-27 02:10:50
【问题描述】:
我正在尝试使用 dirent 库来实现 ls 程序。当我使用 gdb 进行调试时,我的 DIR * mydir 似乎是 <unspecified type>,这对我说好像我没有正确包含 dirent.h 头文件,但我相信我正确地包含了所有必需的头文件.
#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);
}
【问题讨论】:
-
您收到的具体信息是什么?在我看来,gdb 不应该关心你是如何/什么是正确的或不包括...
-
@MatsPetersson 如果我运行该程序,它不会打印任何内容,因此当我使用 gdb 并且此命令 (gdb) print mydir 时,我得到 $1 = (DIR *) 0x601010 如果我使用 print *mydir ,我得到 $2 =
-
当 mydir 为空时,并不一定意味着文件或目录不存在。您应该改为调用 perror。
-
这对我来说似乎是一个合理的地址。单步执行代码时会发生什么?
-
请用空格缩进您发布到 SO 的代码。