头文件:#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\n", pos);
  15. // 重设文件指针的位置
  16. fseek(fp,3,0);
  17. // 再次取得指针位置并存入&pos所指向的对象
  18. fgetpos(fp, &pos);
  19. printf("The file pointer is at byte %ld\n", 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);

C语言fgetpos()函数:获得当前文件的读写指针(转)的更多相关文章

  1. C语言lseek()函数:移动文件的读写位置

    相关函数:dup, open, fseek 头文件:#include <sys/types.h>    #include <unistd.h> 定义函数:off_t lseek ...

  2. C语言开发函数库时利用不透明指针对外隐藏结构体细节

    1 模块化设计要求库接口隐藏实现细节 作为一个函数库来说,尽力降低和其调用方的耦合.是最主要的设计标准. C语言,作为经典"程序=数据结构+算法"的践行者,在实现函数库的时候,必定 ...

  3. C语言open()函数:打开文件函数(转)

    相关函数:read, write, fcntl, close, link, stat, umask, unlink, fopen 头文件:#include <sys/types.h>   ...

  4. C语言stat()函数:获取文件状态

    相关函数:fstat, lstat, chmod, chown, readlink, utime 头文件:#include<sys/stat.h>  #include<uninstd ...

  5. linux c语言 select函数用法

    linux c语言 select函数用法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unis ...

  6. python3文件的读写操作

    open函数:对文件进行读写操作前,先打开文件,获取文件的句柄: open(file, mode, encoding, buffering) 参数说明 file_name:一个包含了你要访问的文件路径 ...

  7. 【C语言入门教程】5.6 函数库和文件

    函数库是为代码复用建立的,将同一类型,需要在不同的程序里使用的函数放置在一起,就组成了一个函数库.如 C 语言的标准库,它集合了开发者常用的函数.开发者自行编写的函数也可以组成函数库,通常称之为自定义 ...

  8. [C 语言基础] 如何调用不同文件中的函数

    很多时候需要将实现不同功能的函数或者与某个模块有关的函数写在一个文件里.这样有两个好处: 1. 方便以后调用:以后需要用到这个模块,或者这类函数,直接将相关文件复制过去,再稍微修改一下就能应用于不同场 ...

  9. C语言文件的读写

    对文件的读和写是最常用的文件操作.在C语言中提供了多种文件读写的函数: 字符读写函数  :fgetc和fputc 字符串读写函数:fgets和fputs 数据块读写函数:freed和fwrite 格式 ...

随机推荐

  1. Linux 任务计划

    一.配置cron实现自动化 使用cron实现任务自动化可以通过修改/etc/crontab文件以及使用crontab命令实现,其结果是一样的. 1./etc/crontab文件实现自动化 cron守护 ...

  2. 转:Java.file

    类 java.io.File 的使用 使用 File 的软件包 java.awt 包含用于创建用户界面和绘制图形图像的所有类. java.io 通过数据流.序列化和文件系统提供系统输入和输出. jav ...

  3. python3+ 模块学习 之 subprocess

    subprocess 模块方法: call() check_call() check_output() 以上三个方法用于创建一个子进程,父进程等待子进程结束.若shell = true, 则shell ...

  4. Web前端工程师

    前端开发,不仅仅是需要会写页面而已,还需要具备很多技能,现做如下总结: 会点设计,不要求精湛,处理图片,设计个小广告是要的: 精通HTML+CSS,并能快速处理各浏览器兼容问题: 熟练掌握Javasc ...

  5. C#中如何定义全局变量及在各窗体中使用全局变量

    using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; us ...

  6. bonext.js学习笔记

    bonext.js是个什么鬼? 首先这是一个前端开发框架,建立在Backbone.js的基础上,使用Jquery操作Dom,Bootstrap负责布局,Art-Template渲染模板,再加上自定义一 ...

  7. wampserver配置域名

    装载自http://blog.csdn.net/znb26/article/details/51204313

  8. hibernate框架之-查询结果集返回类型

    Hibernate支持HQL和SQL的查询,返回结果支持POJO类型或字段/数组的形式. 开发中用Hibernate进行数据库查询,用的是SQL.原来需要查询一个表的几乎所有字段,所以我使用了addE ...

  9. 从入门到精通C++需要学的10本书

    学习C++从入门到精通的的十本最经典书籍  文章来源中国IT实验室收集整理作者佚名更新时间2009-5-16 12:27:05 保存本文保存本文推荐给好友推荐给好友收藏本页收藏本页 欢迎进入C/C++ ...

  10. 【转】Android实现点击两次返回键退出

    在做安卓应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序. 第一种实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获 ...