每当我使用readdir之类的函数列出目录的内容时,返回的文件名也包含".".和"......".我怀疑这些只是文件系统中的普通链接,因此与实际文件无法区分,但我总是要将它们过滤掉,因为它们不是我列出的目录中的实际对象.readdir这样的函数是否有充分理由包含它们?某些操作系统或文件系统是否包含更多或不同的虚拟文件名?除了通过与"."进行字符串比较之外,还有更好的方法来过滤掉它们.和".."?
更新:谢谢大家回答.我想我一直认为像./和../之类的东西仅仅是可以通过搜索和替换来处理的约定.我觉得让它们成为文件系统本身的一部分有点令人惊讶,尽管可能更有效和透明.
但是,有一个问题仍然存在:和..是这些链接的任意名称,是否有使用不同的文件系统?
.
并且..
实际上是文件系统中的硬链接.它们是必需的,以便您可以根据某些参考路径指定相对路径(考虑"../sibling/file.txt"
).由于这些硬链接实际存在于文件系统中,因此有readdir
必要告诉您它们.(实际上这个术语hard link
只是意味着一些与所引用的实际目录无法区分的名称:它们inode
在文件系统中都指向相同的名称).
strcmp
如果你不想列出它们,最好的方法就是忽略它们.
最初它们是硬链接,以及文件系统代码中的特殊情况数量.而且......很小.然而,对于所有现代文件系统而言,情况并非如此.
但是已经建立了这些约定,即使这两个目录条目实际上不存在的文件系统仍然通过readdir等API报告它们的存在.改变这个现在会打破很多代码.