我正在阅读有关流的信息,发现我们可以使用 setvbuf() 函数来控制流...它是在行缓冲模式下写入的 tat 流在遇到换行符时将数据发送到文件,而在未缓冲的情况下没有缓冲...所以我写了下面的代码...
#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)......我的问题是为什么当这些是未缓冲的流时,程序会等待输入(即换行符)......
这是由于环境中的 shell 的工作方式:在您按 Enter 之前,您输入的数据在 stdin
上不可用,因此fread
会阻塞,直到它可以从流中读取某些内容
想想如果 shell 将每个字符都传递给缓冲区,您需要如何处理退格等