0

libevent を使用してノンブロッキング ディスク ファイル記述子の読み取り/書き込みの準備ができていることを検出しているときに (強制ロックによって保護されたファイルの場合)、次の問題に直面しました。

ファイルが別のプロセスによって IO 用にロックされている場合、読み取り/書き込み呼び出しを発行すると、現在のプロセスで EAGAIN が発生します。これは、文書化された API の動作と完全に一致します。

ただし、これらの FD が IO の準備のために libevent によってポーリングされると、IO の準備ができていることが検出され、コールバックが呼び出されます。

これに対する解決策を見つけようとしていますが、正しい行で検索しているかどうかわかりません。これらの呼び出しを回避することは可能ですか?

4

1 に答える 1

0

POSIXによると

通常のファイルに関連付けられたファイル記述子は、読み取り準備完了、書き込み準備完了、およびエラー条件に対して常に true を選択する必要があります。

そのファイル記述子でブロックするスレッドを生成し、ファイルのロックが解除されたときにイベントを I/O スレッドにポストするよりも良い方法があるかどうかはわかりません。

inotifyは、ファイルが開いているか閉じているときにイベントを提供しますが、残念ながら、ロックまたはロック解除されたときはイベントを提供しません。

于 2014-06-12T13:30:46.400 に答える