2011-12-07 123 views
1

バッファなしI/Oと標準I/Oの違いは何ですか?私は、read()、write()、close()を使用することはバッファリングされていないIOであることを知っています。 PrintfとgetはバッファされたIOです。私はまた、大きなトランザクションにバッファされたIOを使用する方が良いことを知っています。私はその理由を知りません。この文脈では、「バッファされた」という用語は何を意味しますか?バッファなしのI/OとバッファされたI/Oの比較

+4

あなたの質問は次のようになります:http://stackoverflow.com/questions/1450551/buffered-io-vs-unbuffered-io – Dave

+3

厳密に言えば、Linuxでは、readなどは**カーネル**は ' O_DIRECT'が有効になります。あなたの文脈では、バッファリングとは、I/O関数呼び出しのたびにフラッシュされない内部配列をCライブラリが維持することを意味します。むしろfflushを呼び出さなければなりません。同様に、読取りバッファは読取り中にコールごとのハングを少なくすることができる。 – moshbear

+0

@moshbear:fflushが何をしているのかを明確にしてください。 c内部配列またはバッファされたキャッシュをフラッシュしますか? – FourOfAKind

答えて

5

バッファなしI/Oとは単に読み書き中にバッファを使用しないことを意味します。一般的に、read()やwrite()などのシステムコールを使用するときにcharでcharを読み書きするため、だから巨大な日付の一般的に高レベルの読み取り/書き込みまたは単純にバッファリングされたI/Oが優先されます.Bufferedは単なる文字を扱わないことを意味しますが、ブロックのI/Oとして知られています。 Unixでは、高水準の読み書き機能を使用するときに、指定されたブロックサイズのデータ​​をフェッチ/格納し、それらをバッファキャッシュに配置し、このバッファキャッシュからこれらのI/O関数が必要な量のデータを取得します。

関連する問題