编辑:在论坛提供了一些帮助之后,很明显,这个问题不是使用S_ISREG()
,而是我使用lstat()
。对不起误导性问题。
我正在寻找一个目录,并试图说出常规文件和子目录之间的区别。
我已经仔细研究了与此问题相关的其他人的问题,尽管有些相似,但没有一个人得到足够清晰的答案来修复我的代码。
int find(char *argv)
{
DIR *pointerToDir;
struct dirent *pointerToDirent;
struct stat status;
int mode;
pointerToDir = opendir(argv);
if(pointerToDir == NULL)
{
printf("Can't open that directory (or it doesn't exist)\n");
closedir(pointerToDir);
return 0;
}
else
{
while((pointerToDirent = readdir(pointerToDir)) != NULL)
{
lstat(pointerToDirent->d_name, &status);
mode = S_ISREG(status.st_mode);
if(mode != 0)
printf("%s must be a file\n", pointerToDirent->d_name);
else
printf("%s must be a dir\n", pointerToDirent->d_name);
}
closedir(pointerToDir);
return 0;
}
}
我向程序传递了一个包含2个子目录和2个常规文件的测试目录。布局将如下所示:
dir1
- sub1
- sub2
- dir1.txt
- test.c
现在,当我运行程序并将“ dir1”作为参数传递时,我希望它返回以下内容:
。必须是目录
..必须是目录
sub1必须为目录
dir1.txt必须是文件
sub2必须是一个目录
test.c必须是文件
但是,相反,它们返回的都是“目录”。我想念什么?