c语言显示点坐标的pos函数,C语言fgetpos()函数:获得当前文件的读写指针(转)...

头文件:#include

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

#include

int main(void)

{

FILE*fp;

char string[] = "This is a test";

fpos_tpos;

// 以读写方式打开一个名为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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值