この質問が古いことは知っていますが、もっと言うべきことがあると思います。タイトルの特定の質問に答えるには:基本的に、決して.
とは別としてselect
、(誤って/使用方法を理解していないため、またはブロッキング操作を中断できるようにしたいため) 割り込みシグナルハンドラーをインストールした場合にのみ発生する可能性があります。関数が失敗したときに再試行するためのループは、それを元に戻すだけです。そうすることは、多くのオペレーティング システムにバグがあり、非準拠の状況で生成されたと報告されていた 80 年代から 90 年代前半にかけての古いアンチ パターンですが、これらのバグはとうの昔になくなりました。poll
EINTR
sigaction
EINTR
EINTR
シグナルで物事を中断できるようにしたいアプリケーションであっても、正常に完了することが非常に重要であるためEINTR
、エラー状態として扱うことができず、呼び出しを完了せずに呼び出し元に戻ることができないコードが存在する可能性があります。手術。このような状況では、再試行ループをインストールすることは理にかなっているかもしれませんが、操作中にシグナル (少なくとも割り込みの可能性があるシグナル) をマスクし、終了後にマスクを解除する方がおそらく良いでしょう。