При использовании libevent для определения готовности чтения / записи неблокирующих дескрипторов файлов на диске (для файлов, защищенных обязательной блокировкой), я столкнулся со следующей проблемой:
Когда файл заблокирован для ввода-вывода другим процессом, я получаю EAGAIN в текущем процессе, когда я выполняю вызов чтения / записи, который идеально согласуется с задокументированным поведением API.
Однако, когда эти FD опрашиваются libevent на предмет готовности к IO, они обнаруживаются как готовые к IO, что приводит к тому, что мой обратный вызов будет вызван.
Я пытался найти решение для этого, но я не знаю, ищу ли я правильные строки. Можно ли избежать этих звонков?
Файловые дескрипторы, связанные с обычными файлами, должны всегда выбирать true для готовности к чтению, готовности к записи и условий ошибки.
Не уверен, что есть лучший способ, чем порождение потока, который блокирует дескриптор этого файла, а затем отправляет событие обратно в ваш поток ввода-вывода, когда файл разблокирован.
Inotify обеспечивает событие, когда файл открыт или закрыт, но, к сожалению, не заблокирован или не заблокирован.