>kevin writes:
>> In /usr/include/sys/dirent.h I see this:
>>
>> /*
>> * File-system independent directory entry.
>> */
>> typedef struct dirent {
>> ino_t d_ino; /* "inode number" of entry */
>> off_t d_off; /* offset of disk
>> directory entry */
>> unsigned short d_reclen; /* length of this record */
>> char d_name[1]; /* name of file */
>> } dirent_t;
>>
>> Why the *name of file* d_name[1] have only one char?
>
>It's a string of unspecified length -- determined by d_reclen.
>
>(Some compilers will allow either '[]' or '[0]' in a structure for
>this case, but that's not compatible with older compilers.)
Also, you *really* shouldn't allocate one yourself; use readdir().
And don't assume that "you must because your code is threaded"; that is
not true; the only reason to use readdir_r are:
- you want to save each and every record returned by readdir_r()
(but you can also copy it)
- if the DIR stream is used by multiple threads at the same time.
And typically you MUST SHOULD NOT (because it's so hard to use readdir_r
correctly) when your code looks like this:
dir = opendir(dirname);
while ((ent = readdir(dir)) != NULL) {
/* do something with ent */
}
closedir(dir);
Even through readdir returns "static allocated memory", it is allocated
with each DIR buffer. So withing readding from a single directory stream,
you can use readdir() even if multiple threads are reading from their
own directory streams.
Casper
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code