zoukankan      html  css  js  c++  java
  • 标准I/O库之定位流

    有三种方法定位标准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 );
    返回值:若成功则返回当前文件位置指示,若出错则返回-1
    
    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/

  • 相关阅读:
    Ubuntu修改root默认密码
    2012年总结
    阿朵,网上传得沸沸扬扬,我们还是听听她的歌吧!
    人力资源开发网站
    关于ant
    ObjectSpaces
    firefox plugs
    xpi插件的安装
    年关
    https的资源
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3505934.html
Copyright © 2011-2022 走看看