为什么readdir()列出" .."作为其中一个文件?

时间:2013-10-04 00:50:02

标签: c linux

我只是无法理解为什么readdir()将“..”列为目录中的一个文件。
以下是我的代码段

while((dir = readdir(d)) != NULL)  
{  
    printf("%s \n", dir->d_name);  //It displayed .. once and rest of the time file names
}  

4 个答案:

答案 0 :(得分:3)

..实际上不是一个文件,它是* nix文件系统的目录。它表示当前目录的父目录。同样地,.是当前目录的表示。这与移动文件树和相关目录表示有关。

changing directories上查看这篇文章:

  

cd ..告诉你的系统到达上面的目录   你正在工作的那个

答案 1 :(得分:3)

...代表当前和父目录,并且存在于所有目录中(请参见下面的脚注)。 readdir()不会过滤掉它们,因为它们是目录中的有效条目。您可以执行以下操作以自行过滤它们。

while((dir = readdir(d)) != NULL)  
{
    if (strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0) {
        continue;
    }
    printf("%s \n", dir->d_name);
}

注意:从技术上讲,SUSv3不要求...实际存在于所有目录中,但确实要求OS实现在路径中遇到时正确解释它们。 /子>

答案 2 :(得分:1)

似乎readdir()不会忽略'..'& ''。所以你必须自己过滤这两个文件。 这篇文章可能会有帮助 How to recursively list directories in C on LINUX

答案 3 :(得分:0)

readdir()读取下一个目录条目。 ..是目录条目。