0

私はストリームについて読んでいて、setvbuf() 関数を使用してストリームを制御できることがわかりました...改行が検出され、バッファリングされていない場合、ラインバッファモードストリームでデータをファイルに送信するように書かれていました。 ..だから私は次のコードを書いた...

#include<stdio.h>


int main()
{

setvbuf(stdin, NULL, _IONBF, 40);
setvbuf(stdout, NULL, _IONBF, 40);
while(1)
{
char a[40];
int n;
n=fread(a, 1, 4, stdin);

if(n>0)
fwrite(a, 1, n, stdout);
}
return 0;
}

これらはバッファリングされていないストリームであるため、画面に書き込むとすぐに入力を標準出力に送信する必要があると思います...しかし、プログラムは各行を書き込んだ後にEnterキーを押すのを待ってから、出力のみが画面に表示されました( fwrite の結果)...私の質問は、これらがバッファリングされていないストリームであるのに、なぜプログラムがエンター(つまり、改行)を待っていたのかということです...

4

1 に答える 1

1

これは、環境内のシェルがどのように機能するかによるものだと思います。入力したデータはstdin、Enter キーを押すまで利用できないためfread、ストリームから何かを読み取ることができるまでブロックされます。

シェルがすべての文字をバッファに渡した場合、バックスペースなどをどのように処理する必要があるかを考えてください

于 2012-06-20T18:31:10.647 に答える