我正在编写一个程序来打印给定目录的所有文件/目录的某些文件/目录信息
这是代码
DIR *dir;
struct dirent *entry;
int i;
struct stat fileStat;
dir = opendir(argv[1]);
if (!dir)
{
printf("cannot open directory : %s\n",argv[i]);
exit(1);
}
entry = readdir(dir);
while (entry)
{
stat(entry->d_name, &fileStat);
printf("%ld ",(long)fileStat.st_ino);
if (S_ISLNK(fileStat.st_mode))
{
printf("lnk");
}
else if (S_ISDIR(fileStat.st_mode))
{
printf("dir");
}
else if (S_ISREG(fileStat.st_mode))
{
printf("reg");
}
printf(" %s\n", entry->d_name);
entry = readdir(dir);
}
我已经检查了st_ino给出错误值的可能原因。我发现的唯一一件事就是把它长时间强加。做到了。仍然给错了输出。 你能告诉我为什么吗? 这是我得到的输出
937896 dir .
937896 dir grade.m
937896 dir grade
914091 dir ..
914091 dir maze
914091 dir myWork
914091 dir grade.d
914091 dir hello.d
答案 0 :(得分:0)
您的stat()
调用返回错误,因为您在没有目录路径的文件名上调用它,但该文件不在当前目录中。您应该始终检查stat()
来电中的错误,然后您会立即注意到该问题。