すべてのバイトが書き込まれるまで書き込みコマンドを強制的にブロックする方法はありますか?

すべてのバイトが書き込まれるまで書き込みコマンドを強制的にブロックする方法はありますか?

マニュアルページによると、 "write count bytes"コマンドを作成し、書き込まれた実際のバイト数を返します。したがって、すべてのバイトがファイル記述子に書き込まれていることを確認するには、書き込みをループに入れ、すべてのバイトが書き込まれていることを監視する必要があります。

しかし、ブロックが書き込まれるまで書き込むようにファイル記述子を設定する方法はありますか?みんなバイトが書き込まれましたか?

編集*違いがあればパイプラインに書き込んでいます。

ベストアンサー1

あなたはシステムコールだけに言及したので、システムコールインターフェイスを介してすべてのデータをOSに転送したいとします。

したがって、すべてのバイトがファイル記述子に書き込まれていることを確認するには、書き込みをループに入れ、すべてのバイトが書き込まれていることを監視する必要があります。

はい。

私が(Linuxで)テストした限り、ほとんどの書き込みは実際にすべてが書き込まれるまでブロックされます。これには、少なくとも通常のファイルと(私が覚えている限り)パイプに書き込むことが含まれます。もちろん、ファイルディスクリプタを非ブロックモードに設定すると、これは起こらない可能性があります(通常のファイルで動作しているかどうかはわかりません)、システムコールの途中でシグナルを受け取ることができます。ここでの正確な動作はシステムによって異なる場合があります。

しかし、すべてのバイトが書き込まれるまでブロックが書き込まれるようにファイル記述子を設定する方法はありますか?

いいえ。

システムコールがシグナルによって中断され、制御がプログラムに戻されると、続行したくない場合があります。したがって、続行するかどうかを決定するのはアプリケーションによって異なります。

おすすめ記事