Изучаю Ch - интерфейс системы UNIX в K&R. Хотя в книге не использовался заголовочный файл "sys / dir.h", но я видел, что он использовался где-то в сети, но компилятор показывает ошибку, когда я пытаюсь включить его, поэтому я не понимаю, является ли он частью стандартного C11 или нет (я думаю, что C11 является последним) для систем UNIX. Расскажите, пожалуйста, о его использовании.
Также обратите внимание, что код чтения каталогов в K&R больше не работает в подавляющем большинстве существующих файловых систем. Боюсь, это одна из частей, которая показывает возраст книги. Вам лучше не беспокоиться об этой части - если вы не найдете System V UFS (файловая система Unix), на которой можно попрактиковаться. Может быть несколько малоизвестных и в основном устаревших систем, где они доступны, но у вас вряд ли будет доступ к одной. Используйте код из <dirent.h> - opendir(), readdir(), closedir() et al.





Как сказано в книге, <sys/dir.h> из System V UNIX.
Сам стандарт C не поддерживает каталоги. POSIX определяет заголовок <dirent.h>, который, среди прочего, объявляет opendir, readdir и closedir.
Система, которую я использую (Ubuntu), имеет заголовок <sys/dir.h>, предположительно для обратной совместимости. Я бы не стал использовать это в новом коде.
Заголовок BSD (macOS) <sys/dir.h> в основном включает <dirent.h>, содержит #define direct dirent «для обратной совместимости» и переопределяет DIRSIZ сложным образом. Я не удивлюсь, обнаружив, что версия для Linux похожа (хотя в моем Ubuntu 16.04 LTS нет файла /usr/include/sys/dir.h - я не уверен, откуда он).
@JonathanLeffler: Это символическая ссылка на ../x86_64-linux-gnu/sys/dir.h в Ubuntu 14.04.5 LTS и 18.04 LTS, предоставленная libc6-dev-i386.
Все имена заголовков в форме
<sys/abcdef.h>не являются частью стандарта C; ни один из стандартных заголовков C не включает косую черту в имени (действительно, единственная пунктуация в именах - это.перед конечнымh). Таким образом, любое имя, такое как<sys/dir.h>, не является стандартом C. Будь то POSIX или какой-либо другой стандарт, сложнее - вы можете посмотреть список Заголовки POSIX, чтобы узнать, является ли данное имя частью POSIX (<sys/dir.h>нет). Поэтому вам нужно выяснить, откуда он взялся - Google (и его родственники) - ваш друг.