Sys / dir.h заголовочный файл в c для систем UNIX

Изучаю Ch - интерфейс системы UNIX в K&R. Хотя в книге не использовался заголовочный файл "sys / dir.h", но я видел, что он использовался где-то в сети, но компилятор показывает ошибку, когда я пытаюсь включить его, поэтому я не понимаю, является ли он частью стандартного C11 или нет (я думаю, что C11 является последним) для систем UNIX. Расскажите, пожалуйста, о его использовании.

Все имена заголовков в форме <sys/abcdef.h> не являются частью стандарта C; ни один из стандартных заголовков C не включает косую черту в имени (действительно, единственная пунктуация в именах - это . перед конечным h). Таким образом, любое имя, такое как <sys/dir.h>, не является стандартом C. Будь то POSIX или какой-либо другой стандарт, сложнее - вы можете посмотреть список Заголовки POSIX, чтобы узнать, является ли данное имя частью POSIX (<sys/dir.h> нет). Поэтому вам нужно выяснить, откуда он взялся - Google (и его родственники) - ваш друг.

Jonathan Leffler 02.06.2018 23:15

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

Jonathan Leffler 02.06.2018 23:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
1 204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как сказано в книге, <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 - я не уверен, откуда он).

Jonathan Leffler 02.06.2018 23:18

@JonathanLeffler: Это символическая ссылка на ../x86_64-linux-gnu/sys/dir.h в Ubuntu 14.04.5 LTS и 18.04 LTS, предоставленная libc6-dev-i386.

Keith Thompson 03.06.2018 02:06

Другие вопросы по теме