char logbuffer[200000] = {};
int main()
{
FILE * file1 = fopen("E:\\2.txt", "r");
setvbuf(stdout, logbuffer, _IOFBF, 200000);
logbuffer[0] = 'a';
logbuffer[1] = 'b';
fflush(stdout);
}
对于这一小段代码,我以为是setvbuf将printf的缓存设置成了logbuffer,fflush是
将缓存区的信息传递给环境(输出出来),
但是为什么我修改了setvbuff的值,fflush之后是什么都没有显示的呢?
setvbuf只是为printf函数提供了一个缓存,比如说你执行setvbuf后,再执行printf函数,logbuffer里就会有你要printf的内容。但执行fflush(stdout)时,具体这个缓存那些内容需要输出到终端是prntf函数内部参数实现控制的,可以参考gcc printf函数的实现源码。
代码中对logbuffer赋值是没有用的,因为文件系统对缓冲区有自己的指针,直接对logbuffer赋值不会改变这个指针,使用以下语句:
puts("a");
puts("b");
fflush(stdout);
简单说的话你只是申请了一个缓存区并没有进行写操作,你应该把STDOUT当作一个文件来看待,写文件的话你可以用fwrite, fprint之类的函数,STDOUT也一样