我正在阅读有关流的内容,并发现我们可以通过使用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的结果)...我的问题是为什么当这些是无缓冲的流时,程序等待输入(即换行)...
答案 0 :(得分:1)
我认为这是由于您环境中的shell工作原理:您输入的数据在stdin
之后无法访问,直到您点击输入,因此fread
阻止,直到它可以从流
如果shell将每个字符传递给缓冲区
,请考虑如何处理后退空间等