有关fread fwrite 以及fseek的总结

本片主要是对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()函数输出错误。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值