I'm getting a list of files on a linux-like system using opendir/readdir. It appears that the directory entries are returned in alphabetical order of file name. However, I don't see anything in the man pages about this order being guaranteed.
Can anyone tell me whether or not readdir guarrantees an order?
opendir() opens the directory file, and mallocs one "struct dirent". readdir() reads the next directory entry into that one "struct dirent", and returns a pointer to it. closedir() closes the directory file, and free's the "struct dirent".
The readdir() function returns a pointer to a structure representing the directory entry at the current position in the directory stream specified by the argument dirp, and positions the directory stream at the next entry. It returns a null pointer upon reaching the end of the directory stream.
The readdir
method doesn't guarantee any ordering. If you want to ensure they are sorted alphabetically you'll need to do so yourself.
Note: I searched for a bit for definitive documentation saying this is the case. The closest I came is the following link
It's by no means definitive but it does give a nice overview of the command, its history and how its implementation is typically traversal order.
In short, no, readdir() does not guarantee any particular order.
from a readdir example in the glibc manual
The order in which files appear in a directory tends to be fairly random. A more useful program would sort the entries (perhaps by alphabetizing them) before printing them
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With