- 论坛徽章:
- 0
|
本帖最后由 pz239 于 2017-11-10 19:57 编辑
/*打开文件用于写*/
FILE *fp = fopen("file", "w");
/*自定义流缓冲区buf*/
char buf[10] = {0};
/*全缓冲*/
setvbuf(fp, buf, _IOFBF, 10);
/*连续写入4个'x'*/
for (int32_t i = 0; i < 4; i++)
fputc('x', fp);
/*此时buf内容为 'xxxx', 一切正常*/
fputs(buf, stdout);
/*定位到流的第3个字节处*/
fseek(fp, 2, SEEK_SET);
/*写入字符'a', 此时缓冲区buf中的内容应该为'xxax'*/
fputc('a', fp);
/*但输出后发现,其中内容居然是'axxx' !!不知为何?*/
fputs(buf, stdout);
程序结束后输出文件内容发现,实际写入到文件的确实是'xxax',这和预期相符,只是不清楚为什么自定义缓冲区的内容和实际写入文件的内容不一致呢?
是fseek对自定义缓冲区不起作用么?
ps:环境为Linux,gcc编译,没加任何优化参数
|
|