POSIX seekdir () и telldir () поведение после изменения целевой папки - PullRequest
3 голосов
/ 14 октября 2010

рассмотрим следующую задачу:

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

2) через некоторое время переберите отфильтрованные элементы и обработайте их (выполните некоторые операции ввода-вывода)

Самый очевидный способ - сохранить имена подкаталогов.
Однако я хочу свести к минимуму использование памяти и избежать дополнительных операций ввода-вывода.

В соответствии с руководствами по POSIX, я могу сохранить положение каждой записи каталога с помощью telldir () и позже восстановить их с помощью seekdir (). Чтобы эти позиции были действительными, я должен держать целевой каталог открытым и не использовать вызов rewinddir ().
Поддержание потока каталога открытым и сохранение списка позиций dir (long int`s) представляется подходящим решением.
Однако неясно, сохраняются ли сохраненные позиции после изменения папки. Я не нашел никаких комментариев к этим условиям в стандарте POSIX.

  • 1) Сохраняются ли сохраненные позиции, когда добавляются / удаляются только новые записи каталога?
  • 2) Сохраняются ли сохраненные позиции неизмененных записей каталога в случае удаления некоторых отфильтрованных записей каталога?
  • 3) Возможно ли, чтобы сохраненная позиция указывала на другую запись каталога после изменения папки?

Легко протестировать и найти ответ на эти вопросы для конкретной системы, но я хотел бы знать, что стандарты говорят по этой теме

Спасибо

1 Ответ

1 голос
/ 14 октября 2010

Пока вы не позвоните rewinddir или не закроете и не откроете каталог, ваше представление о содержимом каталога не должно измениться. Извините, у меня нет справки под рукой. Я найду это позже, если вам это нужно.

...