zoukankan      html  css  js  c++  java
  • C语言fgetpos()函数:获得当前文件的读写指针(转)

    头文件:#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是一个结构体,定义为:

    1. typedef struct
    2. {
    3. __off_t __pos; // 双下划线
    4. __mbstate_t __state;
    5. }fpos_t;

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

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

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

    1. #include <string.h>
    2. #include <stdio.h>
    3. int main(void)
    4. {
    5. FILE *fp;
    6. char string[] = "This is a test";
    7. fpos_t pos;
    8. // 以读写方式打开一个名为test.txt的文件
    9. fp = fopen("test.txt", "w+");
    10. //将字符串写入文件
    11. fwrite(string, strlen(string), 1, fp);
    12. // 取得指针位置并存入&pos所指向的对象
    13. fgetpos(fp, &pos);
    14. printf("The file pointer is at byte %ld ", pos);
    15. // 重设文件指针的位置
    16. fseek(fp,3,0);
    17. // 再次取得指针位置并存入&pos所指向的对象
    18. fgetpos(fp, &pos);
    19. printf("The file pointer is at byte %ld ", pos);
    20. fclose(fp);
    21. return 0;
    22. }

    运行结果:
    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);

  • 相关阅读:
    python做一个数独小游戏
    通过进程快照枚举进程的信息
    单向链表 malloc与free
    指针常量&指向常量的指针
    变量在不同区域的默认初始值
    数组指针和指针数组
    堆的首地址和堆的指针
    创建对象时,系统会自动调用构造函数和析构函数
    对象所占内存的大小与首地址
    范磊 C++ 第8章 指针
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/6254515.html
Copyright © 2011-2022 走看看