Unixのラインバッファリングに関する2つの考慮事項は何ですか?

Unixのラインバッファリングに関する2つの考慮事項は何ですか?

APUE 5.4章のラインバッファについて:

  1. ラインバッファリング。この場合、標準I / Oライブラリは、入力または出力で改行文字が見つかったときにI / Oを実行します。これにより、(標準I / O fputc関数を使用して)一度に1文字を出力でき、実際のI / Oは各行の書き込みが完了したときにのみ発生することがわかります。ラインバッファリングは通常、ストリームが標準入力や標準出力などの端末を参照するときに使用されます。行バッファリングには2つの注意事項があります。まず、各行を収集するために標準I / Oライブラリによって使用されるバッファサイズが固定されているため、改行文字を書き込む前にそのバッファを埋めるとI / Oが発生する可能性があります。次に、(a)バッファリングされていないストリームまたは(b)ラインバッファリングストリーム(カーネルからデータを要求する必要がある)から標準I / Oライブラリを介して入力が要求されるたびに、すべてのラインバッファリング出力ストリームがフラッシュされます。 (b)上位修飾子を使用する理由は、要求されたデータがすでにバッファにある可能性があるため、カーネルからデータを読み取る必要がないためです。明らかにバッファリングされていないストリーム(項目(a))のすべての入力は、カーネルからデータを取得する必要があります。

私はこれら2つの警告をよく理解していません。誰でも例をあげることができますか?

ベストアンサー1

  1. デフォルトでは、たとえば、プログラムが端末にテキストを一度に1文字ずつ非常に遅く書き込んでいて、行の長さが520文字の場合、ライブラリはプログラムの端末に最初の512文字を書き込むことができます。行の書き込み(または生成)を終了する前に。
  2. これは、プログラムが一度に1文字(または他の小さな部分)で端末にテキストを書き込み、次に端末(キーボードなど)から読み取ると、ライブラリが端末に次の部分を書き込むことを意味します。プログラムがこれまでに行った結果、出力ラインが生成されました。端末に書かれた行の中には入力が必要な場合もありますが、時にはそうではない可能性があるため、これは通常必要なものです。

おすすめ記事