I am not an expert on the underlying C API, but I looked into this a bit out of curiosity... but I haven't yet been able to find any examples of whether it is even possible to readdir(3) a directory opened with open(2) instead of opendir(3)? On *NIX systems, the Perl API mirrors the C API closely, and if it's not possible with C, Perl isn't going to be able to do this either - at least not natively, perhaps there are some modules that use XS and can access other APIs provided by the OS, like the openat(2) and related functions.
One reference I found was an older version of the DJGPP manual, which explicitly says (edited for brevity): "You can open directories using open, but there is limited support for POSIX file operations on directories. The principal reason for allowing open to open directories is to support changing directories using fchdir. If you wish to read the contents of a directory, use the opendir and readdir functions instead." This seems to be exactly what your "workaround" is doing. There's also the file chdir-safer.c from gnulib which appears to use the fchdir technique in the function chdir_no_follow.
In reply to Re: readdir() on a sysopen() handle?
by haukex
in thread readdir() on a sysopen() handle?
by perlhuhn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |