操作系统 – 为什么目录列表包含当前(.)和父(..)目录?

每当我列出具有像readdir这样的函数的目录的内容时,返回的文件名也包含“.”.和“..”.我怀疑这些只是文件系统中的正常链接,因此与实际文件无法区分,但是我总是必须将其过滤掉,因为它不是我列出的目录中的实际对象.有没有一个很好的理由像readdir这样的函数来包含它们?某些操作系统或文件系统是否包含更多或不同的虚拟文件名?有没有更好的方法来过滤它们,而不是通过与“.”进行字符串比较.和“..”?

更新:谢谢大家回答.我想我一直认为像./和../这样的东西只是可以通过搜索和替换处理的约定.我觉得有一点令人惊讶,尽管可能更有效率和透明度,使他们成为文件系统本身的一部分.

但是有一个问题是:自从.和..是这些链接的任意名称,是否有文件系统使用不同的?

.和..实际上是文件系统中的硬链接.它们是必需的,以便您可以根据一些参考路径指定相对路径(请参见“../sibling/file.txt”).由于这些硬链接实际上存在于文件系统中,所以readdir可以告诉您这些链接. (实际上,术语硬链接只是指一些与实际目录无关的名称:它们都指向文件系统中的同一个inode).

最好的方法是只要strcmp并忽略它们,如果你不想列出它们.

相关文章
相关标签/搜索