Why do directory listings contain the current (.) and parent (..) directory?
filesystems, operating-system
Solution
`.` and `..` are actually hard links in filesystems. They are needed so that you can specify relative paths, based on some reference path (consider `"../sibling/file.txt"`). Since these hard links are actually existing in the filesystem, it makes sense for `readdir` to tell you about them. (actually the term `hard link` just means some name that is indistinguishable from the actual directory referred to: they both point to the same `inode` in the filesystem).
Best way is to just `strcmp` and ignore them, if you don't want to list them.
Problem
Whenever I list the contents of a directory with a function like readdir, the returned file names also include "." and "..". I have the suspicion that these are just normal links in the file system and therefore indistinguishable from actual files, but I always have to filter them out because they are not actual objects in the directory I am listing. Is there a good reason for functions like readdir to include them? Do some operating systems or file systems contain more or different virtual file names? Is there a better way to filter them out other than by doing string comparison with "." and ".."? Update: thank you all for answering. I suppose I always thought that things like ./ and ../ were mere conventions that could be handled by searching and replacing. I find it a bit surprising, though probably more efficient and transparent, to have them be part of the file system itself. One question remains, though: since . and .. are arbitrary names for these links, are there file systems that use different ones?