Заблокированный файл или каталог в C - PullRequest
0 голосов
/ 04 мая 2009

У меня есть демон, который просматривает определенный файл на предмет изменений, а затем обрабатывает изменения, внесенные в файл.

Но теперь я заметил, что когда я пытаюсь прочитать файл (используя fgets), я не получаю никаких данных. Это происходит только после внесения изменений в файл, но если я попытаюсь прочитать файл в любое другое время, я смогу прочитать его нормально.

Я думаю, что другой процесс заблокировал файл, когда я пытаюсь его прочитать. Как я могу определить, заблокирован ли файл?

Ответы [ 2 ]

5 голосов
/ 04 мая 2009

Когда fgets () возвращает NULL для EOF, он устанавливает условие, которое вам нужно очистить с помощью clearerr (), несмотря на наличие дополнительных данных. (Единственный распространенный тип блокировки файлов в Linux - рекомендательный, так что, скорее всего, это не ваша проблема. Вероятно, inotify - лучшее решение для обнаружения изменений файлов. http://en.wikipedia.org/wiki/Inotify)

0 голосов
/ 04 мая 2009

попробуйте проверить на наличие ошибок с помощью ferror (), и да - как указал Дейв, вы должны вызвать clearerr () до того, как fgets проверит его наличие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...