我非常难以理解缓冲的深度,特别是在C编程中,我已经在这个主题上搜索了很长时间,但至今没有找到令人满意的东西。我会明白其背后的概念(即协调不同硬件设备的操作,并尽量减少这些设备的速度差异),但我希望对这些设备的更全面的解释和其他潜在的缓冲原因(并且我认为完整越长越好),给出一些如何在I/O流中实现缓冲的具体示例也是非常好的。了解C中的缓冲
的其他问题将是我注意到,在缓冲区刷新一些规则不跟我的方案,作为古怪,因为这听起来像下面这个简单的片断:
#include <stdio.h>
int main(void)
{
FILE * fp = fopen("hallo.txt", "w");
fputc('A', fp);
getchar();
fputc('A', fp);
getchar();
return 0;
}
该计划旨在证明当即将调用第一个getchar()时,即将发生的输入将立即刷新任意流,但这不会像我尝试它那样频繁发生,并且只要我想要—就不会发生如stdout
(与printf()
例如)流被刷新,没有任何输入请求也否定规则,因此我理解这个规则错误或我有什么其他的考虑
我在Windows 8.1上使用Gnu GCC。
更新:
我忘了问我一些网站上阅读别人如何访问例如字符串文字作为缓冲区或甚至数组作为缓冲区;这是正确的还是我错过了什么? 请解释这一点。
至于示例,您并未写入'stdout',而是写入任意文件。 – Aneri
对不起,我改变了它 – Lockon2000
对于你最后一个问题(来自更新);是的,数组(尤其是字符)被称为缓冲区,但这与I/O缓冲区不同,即使I/O缓冲区通常使用缓冲区来保存数据,直到它被写入或读取。 –