[112511]Так как [113124]@samiam[113125] заявил, что список возвращается вам в полуслучайном порядке через [113126]readdir()[113127]. Я просто добавлю следующее.[12305]Возвращаемый список - это то, что я бы назвал порядком каталогов. На старых файловых системах порядок часто является порядком создания, в который были добавлены записи файлов в таблице каталога. Конечно, есть оговорка, что когда запись в каталоге удаляется, эта запись затем перерабатывается, так что любые последующие файлы, которые хранятся, будут заменять предыдущую запись, так что порядок больше не будет основываться исключительно на времени создания.[12306]В современных файловых системах, где структуры данных каталога основаны на дереве поиска или хэш-таблице, порядок практически непредсказуем. [12307]Примеры[12308]Показывая файлы, созданные при выполнении команды touch, мы видим, что были назначены следующие коды.[12309]Таким образом, мы видим, что расширение скобки, используемое touch, создает имена файлов в алфавитном порядке, и поэтому при записи на жесткий диск им присваиваются порядковые номера кодов. (Это, однако, не влияет на порядок в каталоге.)[12310]Выполнение вашей команды [113128]tar[113129] несколько раз, похоже, указывает на то, что есть порядок в списке, так как выполнение его несколько раз дает один и тот же список каждый раз. Здесь я прогонял его 100 раз, а затем сравнивал прогоны, и все они идентичны.[12311] Если мы стратегически удалим скажем [113130]dir/e [113131] и затем добавим новый файл [113132]dir/ee [113133], то увидим, что этот новый файл занял то место, которое [113134]dir/e [113135] занимал ранее в таблице записей каталогов.[12312] Теперь сохраним вывод из одного из циклов [113136] для [113137] выше, только из первого. [12313]Теперь, если мы повторим цикл [113138] для [113139], который снова выполнит команду [113140]tar[113141] 100 раз, и сравним этот второй цикл с предыдущим:[12314]Мы заметили, что [113142]dir/ee[113143] занял место [113144]dir/e[113145] в таблице каталогов.[112532].
27.01.2020, 19:49
Ссылка