LINUX.ORG.RU

Гарантирована ли идентичность результатов readdir()

 readdir,


0

1

Нужно понимание, всегда ли readdir() возвращает одно и то же, при условии, что вызывается она на одной и той же машине, на одной и той же FS и состояние FS неизменно между запусками.
Вопрос похож на http://stackoverflow.com/questions/8977441/does-readdir-guarantee-an-order но контекст у меня чуть другой.
Речь не про сортировку, а про идентичность списков при множественых запусках при неизменности всех условий
Потестить я конечно и сам могу, но моя выборка может оказаться нерелевантна

★★★★★

Ответ на: комментарий от Gvidon

Тут вопрос контекста...по всем нагугленным докам я вижу что порядок не гарантируется, то есть он не упорядочен по алфавиту/дате/размеру/итд, но явно нигде не обговаривается поведение при повторных вызовах при неизменном состоянии FS
Я конечно сделаю тест на 100000 вызовов, но, блин всё равно же непоказательно будет

zolden ★★★★★
() автор топика

А с чего бы возник такой вопрос ?

Если FS в неизменном состоянии (ro), то с чего бы меняться списку?

Сортировки тем нет. Как в каталог записали, так и будет читаться IMHO.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

с чего бы меняться списку?

Ну вот и я интуитивно предполагаю что не должен список меняться при таких условиях...но гугление меня смутило и теперь надо решать, оставить ли всё как есть или пердолиться с сортировкой
Единственная оговорка - FS в rw, но состояние директории статично

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

2 переименования файла IMHO могут поменять порядок.

Но если каталог не менялся, то и списку меняться нет причин.

Каталог это файл. С какого перепуга оно будет читаться по разному? Вариант с неисправной электроникой не учитываем.

vel ★★★★★
()
Ответ на: комментарий от vel

Мм...ты меня прям успокоил.
Сделаю тест на 100к вызовов, если результат будет стабильный, то хуяк хуяк и в продакшон

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

Проверь ещё случай с созданием и удалением временного файла. Мало ли что.

legolegs ★★★★★
()
Ответ на: комментарий от vel

Каталог это файл. С какого перепуга оно будет читаться по разному? Вариант с неисправной электроникой не учитываем.

Ну чисто гипотетически, какой-нибудь хитрый кеш с хеш-таблицей, а хеш функция рандомизируется случайным значением на старте ядра, чтобы избежать преднамеренных коллизий.

anonymous
()
Ответ на: комментарий от zolden

Ты задал вопрос «гарантируется ли», на который правильным ответом будет «нет, не гарантируется». Всё остальное — от лукавого. А какую проблему-то решаешь? Зачем оно тебе вообще?

Gvidon ★★★★
()
Ответ на: комментарий от Gvidon

Я понимаю, что ты хочешь сказать, но тут может иметь значение контекст, который спеках не рассматривается из-за специфичности.

Если очень сильно упростить, то ситуация такая: в директории есть языковые файлы, на основе которых UI показывает меню. При повторных запусках должен отображаться ранее выбранный язык.
Сейчас там есть уникальный идентификатор, с которым возникли вдруг проблемы, я исследую вопрос, можно ли вместо него использовать просто номер файла в списке, возвращаемом readdir()

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

Это мне напоминает выбор мелодии звонка из медиатеки андроида. Никогда не угадаешь, что будет играться при слёте базы.

Radjah ★★★★★
()
Ответ на: комментарий от zolden

Сейчас там есть уникальный идентификатор, с которым возникли вдруг проблемы, я исследую вопрос, можно ли вместо него использовать просто номер файла в списке, возвращаемом readdir()

Эм. А имя файла не является таким уникальным идентификатором?

anonymous
()
Ответ на: комментарий от anonymous

Ну то есть твое решение проблемы выглядит как гигантская гузка и гланды.

anonymous
()
Ответ на: комментарий от zolden

Сдаётся мне, что ты пытаешься решить довольно простую проблему каким-то неочевидным и спорным способом. Обычно это плохая идея.

Gvidon ★★★★
()
Ответ на: комментарий от Gvidon

Описание я упростил, на деле ситуация не так очевидна, языки могут браться и не из FS
Пока я просто перебираю варианты, зацикливание на одном варианте это путь в никуда

zolden ★★★★★
() автор топика

А на чём твоя софтина пишется? Может есть более адекватные варианты?

false ★★★★★
()

Нет такой гарантии.

Если даже работает так, как вам хочется, то рассчитывать на это - это всё равно как использовать memcpy вместо memmove для пересекающихся кусков памяти, полагаясь на вроде бы всегда определённый порядок при копировании.

Что там выдаёт readdir() - зависит от реализации ФС, а также может зависеть и от libc. С учётом того, что сейчас в linux-мире модно менять различные подсистемы на более понтовые, вы не сможете быть уверены, что написанный таким образом код завтра будет работать так, как сегодня. Кроме того, никто не отменял возможности переопределения readdir() через LD_PRELOAD, так что в переопределённой функции порядок может меняться при каждом вызове. И эту возможность просто грех не использовать тестировщику вашего продукта. :)

Sorcerer ★★★★★
()
Ответ на: комментарий от zolden

А копировать при выборе языка соответствующий языковой файл в какой-нибудь /var/lib/myprog/selected-language.file и потом юзать его оттуда - не вариант?

thesis ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.