2017-02-24 6 views
1

私はLinuxのマンページを見ても答えは見つからないようです。私はread()がブロックしていることを知っていますが、私はまだwrite()についてはわかりません。 誰かが明確にするために私にどのドキュメントを指すことができますか?write()関数はCでブロックされているか、ブロックされていませんか?

+3

はい、絶対に。書き込みバッファがいっぱいになると、書き込みがブロックされます。あなたは確かに読み書きに自らデッドロックすることができます。 (ファイル記述子は、この問題を起こさないように、明示的に非ブロック化する必要があります)。 –

+3

これは、書き込んでいるfiledescriptorの属性によって異なります。 – PSkocik

+0

ブロッキングは、書き込みが終了するまで書き込みが戻らないことを意味します。定義済みの '完了'。これは、書き込み操作がある時点で完了するのを十分に済ませた(つまり、データを持っていてバッファーを解放できる)が、ディスク上のデータであれば復帰します。おそらくリモートマシンのTCPスタックにあります、疑問がある – pm100

答えて

7

read()write()でPOSIXを読んでください。 open()およびpipe()などの機能も参照してください。

これは、読み書きしているファイルディスクリプタの属性(たとえば、O_NONBLOCKと考える)と、基礎となるファイルタイプ(ディスクファイル対パイプ対FIFO対ソケット対キャラクタまたはブロック特殊)によって異なります。 、 等々。

簡潔には、read()write()の両方は、場合によってはブロッキングまたはノンブロッキングである可能性があります。

関連する問題