Как упорядоченные записи упорядочены?
Я в растерянности относительно того, как dirent
Записи заказаны. Например, если бы у меня был код
DIR* dir = opendir("/some/directory");
struct dirent* entry;
while ((entry = readdir(dir))
printf("%s\n", entry->d_name);
Это может вывести что-то вроде следующего:
abcdef
example3
..
.
123456789
example2
example1
Как видите, этот вывод не в алфавитном порядке. Итак, мне было интересно, как именно dirent
записи заказаны? Почему некоторые записи имеют более высокий приоритет, чем другие?
2 ответа
Они не заказаны каким-либо соответствующим образом. Это зависит от реализации, чтобы получать и возвращать записи каталога в любом удобном для вас порядке.
Расширенное программирование в среде UNIX, 3-е издание, идет немного дальше и даже говорит, что порядок обычно не алфавитный (глава 4, раздел 4.22):
Обратите внимание, что порядок записей в каталоге зависит от реализации и обычно не в алфавитном порядке.
Если вам интересно, вывод ls
сортируется потому что ls
сортирует это.
Они не упорядочены по алфавиту; они извлекаются в том порядке, в котором их поддерживает файловая система.
Каталог "файл" просто содержит список имен файлов и номеров узлов. Для некоторых типов файловых систем файловая система предпочитает не разбивать значение имени файла / индекса по блокам. Поскольку файловая система добавляет или удаляет файлы из списка, она может найти место в одном из блоков. Возможны и другие схемы (например, часто используемые имена файлов находятся в начале списка).
Список, отсортированный по имени файла, зависит от способа сортировки: он может зависеть от локали. (Файловая система не знает или не заботится о ваших настройках locale). Так что это решение остается за приложениями, а не за самой файловой системой.
Для дополнительных комментариев, см.