У вас это полностью задом наперед: это библиотечная функция readdir(3)
, которая предшествует Linux и системному вызову readdir(2)
, а не наоборот.
Называть системный вызов таким образом было определенно плохим решением, и, вероятно, за ним стоит история, но сейчас это в значительной степени не имеет значения, поскольку никто его не использует.
В Unix каталогами были простые файлы, отформатированные особым образом, а интерфейс системных вызовов, через который они были прочитаны, был просто read(2)
[1]. В более поздних системах были введены системные вызовы, такие как getdirentries
(44BSD) и getdents
(SVR3), но они не были готовы или способны стандартизировать интерфейс, поэтому мы все еще застряли на высоком уровне и не работали [2] readdir(3)
функция библиотеки в качестве единственного стандартного интерфейса для чтения каталога.
[1] В некоторых системах, таких как BSD, вы по-прежнему можете cat
каталог, по крайней мере при использовании файловой системы по умолчанию (FFS).
[2] он сломан, потому что он небезопасен, и возвращает NULL
как для ошибки, так и EOF
, что означает, что единственный способ безопасного использования - сначала установить errno
в 0, и проверяя его возвращаемое значение и errno
впоследствии. Тьфу.