Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does readdir() guarantee an order?

Tags:

c

readdir

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?

like image 378
Tom Avatar asked Jan 23 '12 19:01

Tom


People also ask

What is Opendir and Readdir?

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".

What is Readdir in Linux?

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.


2 Answers

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

  • http://utcc.utoronto.ca/~cks/space/blog/unix/ReaddirOrder

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.

like image 58
JaredPar Avatar answered Oct 19 '22 07:10

JaredPar


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

like image 42
Joachim Isaksson Avatar answered Oct 19 '22 07:10

Joachim Isaksson