打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
fpos

http://johnmcu.blog.163.com/blog/static/1724462562011724101151894/

 #include<stdio.h>

                   int fgetpos(FILE *fp, fpos_t *pos) :获取当前文件流指针位置。

                   int fsetpos(FILE *fp, fpos_t *pos) :设置文件流指针位置。

                   int fseek(FILE *fp, long offset, int whence) :设置文件流指针位置

                          offset: 偏移量,可以为负,表示向上偏移

                          whence: 起始位置:从什么位置开始偏移,可为:SEEK_SET(开始位置)、SEEK_CUR(中间位置)、SEEK_END(结束位置)

在使用fsetpos时,可以直接 定义 fpos_t 结构体的变量来修改文件流指针的位置。

typedef _G_fpos_t  fpos_t

在/usr/include/_G_config.h
typedef struct
{
   __off_t  __pos;
__mbstate_t   __state;

}_G_fpos_t;

pos.__pos=140.
fsetpos(fp,&pos);

在不知道fpos_t结构体的第一个成员的时候,当然也可以采用指针的方式,比如:

int  *p =(int)&pos;

*p = 140;

fsetpos(fp,&pos);

当然上边说的这么多都是指在linux下,但是在windows(VC)下会有一些区别,在vc下fpos_t被定义为long型,所以在window下就可以直接去给pos赋值了。。。

 =====================================================================================

fseek(文件类型指针,位移量,起始点);
这里,“起始点”可以用标识符表示,也可以用数字来表示。表示起始点的标识符和对应的数字如表10.2所示。
起始点 标识符 用数字表示
文件开始位置 SEEK_SET 0
文件当前位置 SEEK_CUR 1
文件末尾位置 SEEK_END 2

“位移量”是以“起始点”为基点移动的字节数。C语言要求位移量是长整型数,规定在数字的末尾加一个字母L,就表示是长整型数,这样当文件长度超过64K时不会出现问题。
对于二进制文件,当位移量为正整数时,表示位置指针从指定的起始点向文件尾部方向移动;当位移量为负整数时,表示位置指针从指定的起始点向文件首部方向移动。
例如:指针fp已指向一个二进制文件,能使位置指针从文件的开头向文件尾部移动20个字节的fseek( )函数的调用如下:

fseek(fp,20L,SEEK_SET);     或fseek(fp,20L,0);

再例如:fp已指向一个二进制文件,能使位置指针从文件的尾部向文件开头移动10个sizeof(int)的函数调用如下:

fseek(fp, -10L*sizeof(int),SEEK_END); 或 fseek(fp, -10L*sizeof(int),2);

注意,fseek函数对文本文件和二进制文件的处理方式有所不同。对于二进制文件,可以获得准确的定位。对于文本文件要注意如下的问题,首先文件偏移量必须为0或者通过ftell函数获得的文件指针的当前位置,并且相对位置的起始点必须为SEEK_SET。
另外fseek将指针移动到文件的开始和结束位置时,产生一个文件状态标志,必须使用clearerr函数清除文件状态标志后,才可以继续读写此文件

当文件操作出错后,文件状态标志为非零值,此后所有的文件操作均无效。如果希望继续对文件进行操作,必须清除此错误标志后,才可以继续操作。

clearerr(FILE*);

返回值,0移动成功;-1移动失败。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PHP读取大文件末尾N行的高效方法
fseek函数(转)
C语言学习进程:fseek与ftell函数
基于C的文件操作
关于文件指针定位函数fseek()的一个用法
C语言-文件操作-收集
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服