как убедиться, что файл не прочитан до завершения записи в него - PullRequest
5 голосов
/ 16 июля 2010

При попытке отслеживать каталог с помощью inotify в Linux, как мы знаем, мы получаем уведомление, как только файл создается (до того, как другой процесс завершит запись в него)

Есть ли эффективный способ убедиться, что файл не читается, прежде чем запись в него завершится другим процессом?

Мы могли бы потенциально добавить отложенное чтение; но, как мы все знаем, это недостатки.

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

Ответы [ 4 ]

1 голос
/ 16 июля 2010

Создайте его где-нибудь еще, напишите, закройте, затем переименуйте - или я упускаю что-то очевидное?

1 голос
/ 17 июля 2010

Судя по вашему вопросу, похоже, что вы в данный момент отслеживаете каталог с флагом IN_CREATE (и, возможно, IN_OPEN)Почему бы также не использовать флаг IN_CLOSE, чтобы получать уведомления при закрытии файла?Оттуда должно быть легко отследить, открыт ли файл, и вы будете знать, что пока не хотите его читать.

0 голосов
/ 25 июля 2010

может быть, команда lsof может помочь. В нем перечислены все открытые файлы. $ man lsof

0 голосов
/ 16 июля 2010

Вы можете проверить /proc/<pid>/fd, чтобы увидеть, открыт ли файл. Если его там нет, вы можете быть уверены, что процесс больше не использует его.

...