我只是无法理解为什么 readdir() 将“..”列为目录中的文件之一。
以下是我的代码片段
while((dir = readdir(d)) != NULL)
{
printf("%s \n", dir->d_name); //It displayed .. once and rest of the time file names
}
..
实际上不是文件,它是 *nix 文件系统的目录。它代表当前目录的父目录。同样.
是当前目录的表示。这与在文件树和相对目录表示中移动有关。
看看这篇关于更改目录的文章:
cd .. 告诉您的系统进入您当前正在工作的目录之上的目录
和代表当前目录.
和..
父目录,并且存在于所有目录中(见下面的脚注)。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 不需要.
并且..
实际上存在于所有目录中,但确实需要操作系统实现在路径中遇到它们时正确解释它们。
似乎 readdir() 并没有忽略“..”和“.”。所以你必须自己过滤这两个文件。这篇文章可能会有所帮助 如何在 LINUX 上递归列出 C 中的目录
readdir()
读取下一个目录条目。..
是一个目录条目。