本片主要是对fread fwite 的文件指针定位问题进行总结
fread 功 能: 从一个流中读数据 函数原型: size_t fread(void* buffer ,size_t size ,size_t count ,FILE* stream ); 参 数: 1.用于接收数据的地址(指针)( buffer) 2.单个元素的大小(size) :单位是字节而不是位,例如读取一个int型数据就是4个字节 3.元素个数( count) 4.提供数据的文件指针(stream)返回值:读取的元素的个数
example:
void main()
{
FILE *fp;
char buf[10];
if((fp=fopen("test.ini","r+"))==NULL)
{
printf("open error\n");
}
fread(buf,2,1,fp);
printf("%s\n",buf);
fread(buf,2,1,fp);
printf("%s\n",buf);
fclose(fp);
}
打印的结果说明,使用了fread以后这次读到哪里下次还是从上次的地方开始读。
但是当我使用了w+方式打开以后发现里面的东西全没了,可见使用w+回清除原来的数据。
下面看看fwrite方式 会不会改变:
void main()
{
FILE *fp;
char buf[3]="abc";
if((fp=fopen("test.ini","w+"))==NULL)
{
printf("open error\n");
}
fwrite(buf,3,1,fp);
//printf("%s\n",buf);
fwrite(buf,3,1,fp);
//printf("%s\n",buf);
fclose(fp);
}
运行程序可见fwrite和fread一样都是根据上次的重点来进行读和写。
下面写一点fseek,是从百度百科里看的:
重定位流(数据流/文件)上的文件内部位置指针
注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。
int fseek(FILE *stream, long offset, int fromwhere);
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0,当前位置1,文件尾2)为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整形。
成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。