好的,所以我遇到了一些问题。这是我的代码(在此之前调用的 opendir():
while( (dp = readdir(dfd)) != NULL ) {
if( strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0)
continue;
lstat(dp->d_name, &stbuf);
printf("%s: ", dp->d_name);
if( S_ISDIR(stbuf.st_mode) )
puts("Directory");
else if ( S_ISREG(stbuf.st_mode) )
puts("File");
else if ( S_ISCHR(stbuf.st_mode) )
puts("Character Device");
else if ( S_ISBLK(stbuf.st_mode) )
puts("Block Device");
else if ( S_ISFIFO(stbuf.st_mode) )
puts("Fifo");
else if ( S_ISLNK(stbuf.st_mode) )
puts("Link");
else
puts("Socket");
}
return;
}
我正在阅读一个目录并确定其中的文件类型。唯一的问题是这将始终打印"目录",我相信这与对 lstat 的调用有关。我不完全确定如何适当地更改它。
lstat(dp->d_name, &stbuf);
事物是dp->d_name
只包含文件名,而不是完整路径。所以它可能会失败,但你不会注意到,因为你没有测试它的返回值。
您需要在目录前面加上路径(即您传递给opendir
的内容)。
我可以看到两个明显的关注原因:
- 你没有建立正确的道路。除非您在目录中(即您
opendir(".")
),否则您将错误的路径传递给lstat()
。您需要将目录的名称与每个文件的名称连接起来。打开目录并不意味着使其成为当前目录。 - 在检查其返回值之前,您不会检查
lstat()
是否成功。