头文件:#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. dubbo+zookeeper集群配置

    集群服务注册到多台zookeeper配置: <dubbo:registry protocol="zookeeper" address="10.20.153.10:2 ...

  2. IOS 中openGL使用教程2(openGL ES 入门篇 | 绘制一个多边形)

    在上一篇我们学习了如何搭建IOS下openGL的开发环境,接下来我们来学习如何绘制一个多边形. 在2.0之前,es的渲染采用的是固定管线,何为固定管线,就是一套固定的模板流程,局部坐标变换 -> ...

  3. Sublime插件安装

    来在Sublime text3上安装Package Control 使用Ctrl+`(ESC下边的那个~)快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码: imp ...

  4. jms的俩种模式

    package com.jiangchong.job; import java.util.Date; import javax.jms.Connection; import javax.jms.Con ...

  5. 用systemd脚本自动启动node js程序

    vi /usr/lib/systemd/system/pano.service [Unit] Description=pano - main site of site_name.com Documen ...

  6. Orcle基本语句(六)

    -- Created on 2017/1/5 by ADMINISTRATOR DECLARE -- Local variables here i ; v_name ) := '张晓风'; v_age ...

  7. SpirentTestcenter测试仪的自动化

    SpirentTestcenter,美国思博伦公司的网络测试仪表,覆盖以太网L2~L7层,使用过的仪表中功能最强大的. 1.SpirentTestcenter的自动化测试场景 测试PC上的AT框架-- ...

  8. Sublime Text 全程指引

    Sublime Text 全程指引 by Lucida 包含sublime 的常用快捷操作

  9. Image 抠图,背景透明处理

    import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.i ...

  10. springMVC和mybatis整合,jsp对时间进行格式化

    发现jsp显示的时间,是java Date类型的默认格式,一串鸡肠.... 可在jsp对输出进行格式化: 1.加入taglib <%@ taglib prefix="fmt" ...