我只是无法理解为什么readdir()将“..”列为目录中的一个文件。
以下是我的代码段
while((dir = readdir(d)) != NULL)
{
printf("%s \n", dir->d_name); //It displayed .. once and rest of the time file names
}
答案 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()
读取下一个目录条目。 ..
是目录条目。