定位流 -- ftello、fseeko、fgetpos、fsetpos

2014-07-25 15:05:41   最后更新: 2014-07-25 15:05:41   访问数量:1241




有三种方法可以定位标准IO流

  1. ftell 和 fseek 函数,这两个函数假定文件的位置可以存放在一个长整型中
  2. ftello 和 fseeko 函数,他们使用off_t类型代替了长整型
  3. fgetpos 和 fsetpos 函数,是由ISO C引入,用抽象数据类型fpos_t记录文件位置

 

long ftell ( FILE *stream );

 

返回当前文件位置指示,调用出错返回-1L

 

int fseek(FILE *stream, long offset, int whence);

 

调用成功返回0,否则返回非0值

 

用于二进制文件时,必须指定一个字节的offset,以及解释这种偏移量的方式

 

  • whence与lseek函数的相同:

  1. 若whence是SEEK_SET, 则将该文件的偏移量设置为距文件开始处offset个字节
  2. 若whence是SEEK_CUR,则将该文件的偏移量设置为其当前值加offset,offset可以为正或负
  3. 若whence是SEEK_END,则将该文件的偏移量设置为文件长度加offset,offset可以为正或负

  • 对于文本文件,offset只能取两种值,0(文件起始处)或是ftell的返回值

 

void rewind(FILE *stream);

 

将一个流设置到文件的起始位置

 

off_t ftello ( FILE *stream ); int fseeko(FILE *stream, off_t offset, int whence);

 

与上述两个函数只有类型上的区别,没有其他区别

 

int fgetpos(FILE *stream,*fpos_t filepos); int fsetpos(FILE *stream, const fpos_t *pos);

 

定义于stdio.h头文件中,调用成功返回0,否则返回非0值

 

以上定位标准IO流的函数,本质上是调用系统调用lseek实现的,但是,与lseek不同,以上定位流的函数只能定位到文件开头或用ftell、ftello、fgetpos保存过的位置






读书笔记      技术帖      linux      unix      c++      cpp      c语言      龙潭书斋      apue      unix环境高级编程      ftello      fseeko      fgetpos      fsetpos     


京ICP备15018585号