有三种方法定位标准I/O流。

(1)ftell和fseek函数。这两个函数自V7以来就存在了,但是它们都假定文件的位置可以存放在一个长整型中。

(2)ftello和fseeko函数。Single UNIX Specification引入了这两个函数,可以使文件偏移量不必一定使用长整型。它们使用off_t数据类型代替了长整型。

(3)fgetpos和fsetpos函数。这两个函数是由ISO C引入的。它们使用一个抽象数据类型fpos_t记录文件的位置。这种数据类型可以定义为记录一个文件位置所需的长度。

需要移植到非UNIX系统上运行的应用程序应当使用fgetpos和fsetpos。

#include <stdio.h>

long ftell( FILE *fp );
返回值:若成功则返回当前文件位置指示,若出错则返回-1L int fseek( FILE *fp, long offset, int whence );
返回值:若成功则返回0, 若出错则返回非0值 void rewind( FILE *fp );

对于一个二进制文件,其文件位置指示器是从文件起始位置开始度量,并以字节为计量单位。ftell用于二进制文件时,其返回值就是这种字节位置。为了用fseek定位一个二进制文件,必须指定一个字节offset,以及解释这种偏移量的方式。whence的值与lseek函数的相同:SEEK_SET表示从文件的起始位置开始,SEEK_CUR表示从当前文件位置开始,SEEK_END表示从文件的尾端开始。

对于文本文件,它们的文件当前位置可能不以简单的字节偏移量来度量。这主要也是在非UNIX系统中,它们可能以不同的格式存放文本文件。为了定位一个文本文件,whence一定要是SEEK_SET,而且offset只能有两种值:0(绕回到文件的起始位置),或是对该文件调用ftell所返回的值。使用rewind函数也可以将一个流设置到文件的起始位置。

除了offset的类型是off_t而long以外,ftello函数与ftell相同,fseeko函数与fseek相同。

#include <stdio.h>

off_t ftello( FILE *fp );
返回值:若成功则返回当前文件位置指示,若出错则返回- int fseeko( FILE *fp, off_t offset, int whence );
返回值:若成功则返回0,若出错则返回非0值

fgetpos和fsetpos这两个函数是C标准引进的。

#include <stdio.h>

int fgetpos( FILE *restrict fp, fpos_t *restrict pos );
int fsetpos( FILE *fp, const fpos_t *pos );
两个函数返回值:若成功则返回0,若出错则返回非0值

fgetpos函数将文件位置指示器的当前值存入由pos指向的对象中。在以后调用fsetpos时,可以使用此值将流重新定位至该位置。

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

最新文章

  1. MAC终端命令行下用sublime、vscode、atom打开文件或目录
  2. 二.持续集成之--WEB后台
  3. c++异常捕获
  4. 【leetcode】Remove Duplicates from Sorted Array I &amp; II(middle)
  5. 为什么网页通常把JS调用放在底部?
  6. BizTalk开发系列(四) 深入Map测试
  7. Java构建
  8. linux下的软件包安装
  9. JDBC第四篇--【数据库连接池、DbUtils框架、分页】
  10. 今天遇到了一个Spring出现的一个未知错误,分享下
  11. scala的多种集合的使用(5)之数组Array(ArrayBuffer)的操作
  12. 模拟poj1350
  13. 全面了解TCP/IP到HTTP
  14. 01.JDBC操作数据库-快速入门操作
  15. PAT 1013 Battle Over Cities
  16. Spring Security构建Rest服务-1204-Spring Security OAuth开发APP认证框架之Token处理
  17. Django2.0中URL的路由机制
  18. BaaS后端即服务 - 概念篇
  19. informatica powercenter学习笔记(三)
  20. JS把内容动态插入到DIV

热门文章

  1. C#技术------垃圾回收机制(GC)
  2. 【HDOJ】1262 寻找素数对
  3. simplified build configuration
  4. 解决WebService 测试窗体只能用于来自本地计算机的请求
  5. BZOJ_1613_ [Usaco2007_Jan]_Running_贝茜的晨练计划_(动态规划)
  6. sql server 修改表的默认值, 需要先删除约束条件
  7. [Irving]DateTime格式处理大全
  8. 独立线程中实现QT GUI
  9. 跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量
  10. [codevs1557]热浪