我很难理解缓冲区的深度,特别是在C编程中。我已经对这个主题进行了长时间的搜索,但直到现在还没有找到令人满意的结果。
我会更具体地说明一下:我确实理解它背后的概念(即不同硬件设备之间协调操作并最小化这些设备速度差异),但我希望能够更全面地解释这些和其他可能的缓冲区原因(而且我所说的“全面”是指越长越深入越好)。同时,给出一些关于如何在I/O流中实现缓冲的具体示例也将非常有帮助。
另一个问题是,我注意到我的程序没有遵循某些缓冲区刷新规则,就像以下简单片段一样,听起来很奇怪:
#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。更新:我忘记问了,我在一些网站上看到人们将字符串字面值称为缓冲区,甚至将数组称为缓冲区; 这正确吗,还是我错过了什么?请解释这一点。