标准I/O的写缓冲区和读缓冲区是不是同一个?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
int
main()
{
FILE * fp;
int n;
char buf[MAX];
if((fp=fopen("f","r+"))==NULL)
{
perror("fopen");
exit(1);
}
n=fileno(fp);
fread(buf,sizeof(char),5,fp);
printf("%ld\n",lseek(n,0,SEEK_CUR));
printf("%ld\n",ftell(fp));
//write(n,"yui",strlen("yui"));
fwrite("lkj",sizeof(char),strlen("lkj"),fp);
printf("%ld\n",lseek(n,0,SEEK_CUR));
printf("%ld\n",ftell(fp));
return 0;
}
其中f文件的初始内容为qwerty
输出为:
7
5
7
8
最终f文件内容为qwertlkj
试想如果采用同一缓冲区f内容应为qwertylk,但书上并未显示地说明。