Шрифт:
Функция
Этот цикл читает элементы каталога, по одной за раз, до тех пор, пока
Вывод никаким образом не сортируется; он представляет линейное содержимое каталога. (Как сортировать содержимое каталога мы опишем в разделе 6.2 «Функции сортировки и поиска»).
5.3.1.1. Анализ переносимости
Есть несколько соображений по переносимости. Во-первых, не следует предполагать, что двумя первыми элементами, возвращаемыми
55
В системах GNU/Linux могут монтироваться файловые системы многих операционных систем, не относящихся к Unix. Во многих коммерческих системах Unix также можно смонтировать файловые системы MS-DOS. В таких случаях предположения относительно файловых систем Unix неприменимы — Примеч. автора.
Во-вторых, стандарт POSIX ничего не говорит о возможных значениях
Поэтому по крайней мере на системах GNU/Linux и Unix маловероятно, что
Наконец, некоторые системы используют
«Не пробуйте это дома, дети!»
– М-р Wizard -
Многие системные вызовы, такие, как
Однако, другие системные вызовы существуют лишь для того, чтобы дать возможность реализовать стандартные библиотечные функции более высокого уровня, и никогда не должны вызываться непосредственно. Одним из таких системных вызовов является GNU/Linux
Эти системные вызовы только-для-библиотечного-использования можно отличить от вызовов для-использования-пользователем по их представлению в странице справки. Например, из getdents(2).
Любой системный вызов, использующий макрос
В случае
5.3.1.2. Элементы каталогов Linux и BSD
Хотя мы только что сказали, что вам следует использовать лишь члены
Таблица 5.1. Значения для
Имя | Значение |
---|---|
DT_BLK | Файл блочного устройства |
DT_CHR | Файл символьного устройства |
DT_DIR | Каталог |
DT_FIFO | FIFO или именованный канал |
DT_LNK | Символическая ссылка |
DT_REG | Обычный файл |
DT_SOCK | Сокет |
DT_UNKNOWN | Неизвестный тип файла |
DT_WHT | Нет элемента (только системы BSD) |
Знание типа файла просто путем чтения элемента каталога очень удобно; это может сэкономить на возможно дорогом системном вызове
5.3.2. Функции размещения каталогов BSD
Иногда полезно отметить текущее положение в каталоге для того, чтобы иметь возможность позже к нему вернуться. Например, вы пишете код, обходящий дерево каталога, и хотите рекурсивно входить в каждый подкаталог, когда его проходите. (Как отличить файлы от каталогов обсуждается в следующем разделе). По этой причине первоначальный интерфейс BSD включал две дополнительные процедуры: