好吧,所以我遇到了一些问题。这是我的代码(在此之前调用的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有关。我不确定如何适当地改变它。
答案 0 :(得分:4)
lstat(dp->d_name, &stbuf);
Thing is dp->d_name
仅包含文件的名称,而不包含完整路径。所以它可能会失败,但你不会注意到,因为你没有测试它的返回值。
您需要预先添加目录的路径(即传递给opendir
的内容)。
答案 1 :(得分:3)
我可以看到两个值得关注的明显原因:
opendir(".")
),否则您将错误的路径传递给lstat()
。您需要将目录的名称与每个文件的名称连接起来。打开目录并不意味着将其作为当前目录。lstat()
是否成功。