2025年4月28日 星期一 乙巳(蛇)年 正月廿九 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言fgetpos()函数:获得当前文件的读写指针

时间:12-29来源:作者:点击数:112

头文件:#include<stdio.h>

fgetpos()函数获得当前文件的指针所指的位置,并把该指针所指的位置信息存放到pos所指的对象中。pos以内部格式存储,仅由fgetpos()和fsetpos()使用。fsetpos()的功能与fgetpos()相反,用来设置当前文件的指针。fgetpos()的原型为:
    int fgetpos( FILE *fp, fpos_t *pos );

【参数】fp为当前文件流的指针,pos为指向fpos_t类型的指针。

fpos_t是用来表示文件读写指针位置的类型,用来指明正在操作的文件中读或写的位置,文件头处为0。fpos_t在不同的平台下有不同的类型。

在windows下,fpos_t是一个64位整数,可以直接赋值,如fpos_t = 12。

在linux下,fpos_t是一个结构体,定义为:

  • typedef struct
  • {
  • __off_t __pos; // 双下划线
  • __mbstate_t __state;
  • }fpos_t;

fpos_t.__pos才是指向当前位置的整数,可以进行赋值,如 fpos_t.__pos = 12。

【返回值】成功返回0,失败返回非0,并设置errno。

【实例】window上应用fgetpos函数取得当前文件的指针所指的位置。

  • #include <string.h>
  • #include <stdio.h>
  • int main(void)
  • {
  • FILE *fp;
  • char string[] = "This is a test";
  • fpos_t pos;
  • // 以读写方式打开一个名为test.txt的文件
  • fp = fopen("test.txt", "w+");
  • //\将字符串写入文件
  • fwrite(string, strlen(string), 1, fp);
  • // 取得指针位置并存入&pos所指向的对象
  • fgetpos(fp, &pos);
  • printf("The file pointer is at byte %ld\n", pos);
  • // 重设文件指针的位置
  • fseek(fp,3,0);
  • // 再次取得指针位置并存入&pos所指向的对象
  • fgetpos(fp, &pos);
  • printf("The file pointer is at byte %ld\n", pos);
  • fclose(fp);
  • return 0;
  • }

运行结果:

The file pointer is at byte 14
The file pointer is at byte 3

首先,程序以读写方式打开一个名为test.txt的文件,并把字符串"This is a test"写入文件。注意:字符串共14个字节,地址为0~13。用fwrite函数写入后,文件指针自动指向文件最后一个字节的下一个位置。即这时的fp的值应该是14。

再用fgetpos函数取得指针位置并存入&pos所指向的对象,此时, pos中的内容为14。然后在屏幕上显示出The file pointer is at byte 14。

再用fseek函数重设文件指针的位置,让fp的值为3,即指向文件中第4个字节。

再次取得指针位置并存入&pos所指向的对象。然后在屏幕上显示出The file pointer is at byte 3。

注意:在linux下,不能这样定义pos:
    fpos_t  *  pos;
    fgetpos(fp,pos);
必须这样定义:
    fpos_t  pos;
    fgetpos(fp,&pos);

因为pos必须是一个分配好内存空间的参数。第一种方式仅仅是定义了一个指针,并没有分配空间。如果改为下面的定义方式,则可以编译通过:
    fpos_t  *  pos;
    pos = (fpos_t)malloc(12);
    fgetpos(fp,pos);

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门