2012-06-20 45 views
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的结果)...我的问题是为什么程序等待输入(即换行符),当这些没有缓冲的流......

回答

1

我相信这是由于环境中的壳是如何工作的:您输入的数据是不可用的stdin直到你按下回车键,所以fread阻塞,直到它可以从流

想想读的东西如果shell将每个字符传递给缓冲区,你将如何处理反向空间以及类似内容

+0

@attila ...但理论上在字符类型中应该立即传递给文件...不是吗? – avinash

+0

@avinash - 你在说什么文件? 'stdin'的行为就好像它是一个文件(用于各种函数调用),但它不是一个文件。另外,我不知道一个环境,它将立即将输入的字符传递给标准输入(谈论直接用户交互) – Attila

+0

@attila ...这里我称之为由filestream表示的任何东西作为文件...还有我不是在谈论优点...我只是问是否它是这样的 – avinash