ローカル ファイル システム上のファイルに頻繁にデータを追加したいと考えています。長時間ブロックせずに、ワーカースレッドを作成せずにこれを行いたいです。Linux カーネル 2.6.18 の場合。
Linux での glibc の POSIX AIO 実装は、ユーザー空間のスレッドプールを作成し、それらのスレッドをブロックしているようです。これは素晴らしいことですが、独自の特別な専用ファイル ブロック スレッドを簡単にスピンオフすることもできます。
そして、Linux カーネル AIO 実装が現在、追加時にブロックされていることを理解しています。私がやりたいのは追加だけです。
- http://code.google.com/p/kernel/wiki/AIOUserGuide
- https://groups.google.com/forum/#!msg/linux.kernel/rFOD6mR2n30/13VDXRTmBCgJ
O_NONBLOCK でファイルを開くことを検討しており、その後、遅延書き込みのようなものを実行して、EWOULDBLOCK後で書き込みを再試行します。このようなもの:
open(pathname, O_CREAT | O_APPEND | O_NONBLOCK);- 呼び出し
write()、エラーをチェックEAGAIN | EWOULDBLOCK - の場合
EAGAIN | EWOULDBLOCKは、書き込むデータを保存して、write()後でもう一度試してください。
これは良い考えですか?これに実際の利点はありますか?そのファイルに対して開いているファイル記述子を持っているのが私だけで、 awrite()と itを試してみると、後でEWOULDBLOCKそうなる可能性は低くなりEWOULDBLOCKますか? それはありEWOULDBLOCKますか?私write()とそれがそうでない場合、それは迅速に戻るEWOULDBLOCKことを意味しますか?write()
言い換えれば、Linux 2.6.18write()でローカル ファイルへの接続が失敗するのは、正確にはどのような状況でしょうか?EWOULDBLOCK