st_ino st_mode给出错误的值

时间:2014-05-27 15:58:13

标签: c unix

我正在编写一个程序来打印给定目录的所有文件/目录的某些文件/目录信息

这是代码

    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

1 个答案:

答案 0 :(得分:0)

您的stat()调用返回错误,因为您在没有目录路径的文件名上调用它,但该文件不在当前目录中。您应该始终检查stat()来电中的错误,然后您会立即注意到该问题。

相关问题