最近いろいろな都合でLinuxのAPIを調べる機会が多いのだが、
open()
read()
この2つに(というかread()に)致命的な間違いがある。
open()は確かに正しい。O_NONBLOCKさえ指定しなければブロックする。
だがread()はブロックしない。fdのオープンモードには関係ない。
一度read()が成功したらノンブロックで読み続ける(FIFOで実験しよう)。
read()がブロッキングしてくれると思ったら大間違いだ。
自分で確かめてみてくれ。
あえてコードは出さない。
2020/07/10追記
上記は半分間違いである。
read()でのブロッキングは可能だ。
些細な問題を除けばだが。