1

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

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

4 回答 4

3

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

看看这篇关于更改目录的文章:

cd .. 告诉您的系统进入您当前正在工作的目录之上的目录

于 2013-10-04T00:57:02.363 回答
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 不需要.并且..实际上存在于所有目录中,但确实需要操作系统实现在路径中遇到它们时正确解释它们。

于 2013-10-04T01:00:28.650 回答
1

似乎 readdir() 并没有忽略“..”和“.”。所以你必须自己过滤这两个文件。这篇文章可能会有所帮助 如何在 LINUX 上递归列出 C 中的目录

于 2013-10-04T01:08:54.803 回答
0

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

于 2013-10-04T06:24:30.487 回答