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;
}

所以我认为因为这些是无缓冲的流,所以输入应该在我写入屏幕后立即发送到标准输出......但是程序等待我在写完每一行后按回车然后只有输出出现在屏幕上(如fwrite 的结果)...我的问题是为什么程序在这些是无缓冲的流时等待输入(即换行符)...

4

1 回答 1

1

我相信这是由于您的环境中的 shell 是如何工作的:您输入的数据在您按 Enter 之前不可用stdin,因此fread它会阻塞,直到它可以从流中读取某些内容

想想如果 shell 将每个字符都传递给缓冲区,你需要如何处理退格等

于 2012-06-20T18:31:10.647 回答