Как использовать libevent для определения момента снятия блокировки файла?

При использовании libevent для определения готовности чтения / записи неблокирующих дескрипторов файлов на диске (для файлов, защищенных обязательной блокировкой), я столкнулся со следующей проблемой:

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

Однако, когда эти FD опрашиваются libevent на предмет готовности к IO, они обнаруживаются как готовые к IO, что приводит к тому, что мой обратный вызов будет вызван.

Я пытался найти решение для этого, но я не знаю, ищу ли я правильные строки. Можно ли избежать этих звонков?

0

Решение

Согласно POSIX:

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

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

Inotify обеспечивает событие, когда файл открыт или закрыт, но, к сожалению, не заблокирован или не заблокирован.

0

Другие решения