无缓冲的流表现得像行缓冲

时间:2012-06-20 18:26:33

标签: stream filestream bufferedinputstream

我正在阅读有关流的内容,并发现我们可以通过使用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;
}

所以我认为因为这些是无缓冲的流,所以一旦我写入屏幕就应该将输入发送到stdout ......但是程序在写完每一行后等待我按下输入然后只有输出出现在屏幕(作为fwrite的结果)...我的问题是为什么当这些是无缓冲的流时,程序等待输入(即换行)...

1 个答案:

答案 0 :(得分:1)

我认为这是由于您环境中的shell工作原理:您输入的数据在stdin之后无法访问,直到您点击输入,因此fread阻止,直到它可以从流

如果shell将每个字符传递给缓冲区

,请考虑如何处理后退空间等