Sun Studio 12:Fortran 库参考

1.4.13 fseekftell:确定文件的位置和复位文件

fseekftell 是用于实现文件复位的例程。ftell 返回文件的当前位置,以距文件开头的字节偏移量表示。在程序中后面某处,fseek 可以使用此保存的偏移值,将文件复位到原来位置以便读取。

1.4.13.1 fseek:将文件复位到逻辑单元中

该函数的调用方式如下所示:

INTEGER*4 fseek

n = fseek( lunit, offset, from )

lunit

INTEGER*4

输入 

开放的逻辑单元 

offset

INTEGER*4

INTEGER*8

输入 

相对于 from 指定位置的字节偏移量

 

如果针对 64 位环境进行了编译,需要 INTEGER*8 偏移值。如果提供了文字常量,它必须是 64 位常量,例如:100_8

from

INTEGER*4

输入 

0=文件开头 

1=当前位置 

2=文件结尾 

返回值 

INTEGER*4

输出 

n=0:OK;n>0:系统错误代码


注 –

对于后续文件,在调用 fseek 后面执行输出操作(例如 WRITE)会导致 fseek 位置后面的所有数据记录被删除,并替换为新的数据记录(以及文件结束标记)。只有在使用直接访问文件时,才能将记录重新写入到位。


示例:fseek()-将 MyFile 复位到距开头两个字节处


        INTEGER*4 fseek, lunit/1/, offset/2/, from/0/, n
        open( UNIT=lunit, FILE=’MyFile’ )
        n = fseek( lunit, offset, from )
        if ( n .gt. 0 ) stop ’fseek error’
        end

示例:同上,但在 64 位环境中,使用 -m64 编译:


        INTEGER*4 fseek, lunit/1/,  from/0/, n
        INTEGER*8 offset/2/
        open( UNIT=lunit, FILE=’MyFile’ )
        n = fseek( lunit, offset, from )
        if ( n .gt. 0 ) stop ’fseek error’
        end

1.4.13.2 ftell:返回文件的当前位置

该函数的调用方式如下所示:

INTEGER*4 ftell

n = ftell( lunit )

lunit

INTEGER*4

输入 

开放的逻辑单元 

返回值 

INTEGER*4

输出 

n>=0:n 为距文件开头的字节偏移量

n<0:n 为系统错误代码

示例:ftell()


       INTEGER*4 ftell, lunit/1/, n
       open( UNIT=lunit, FILE=’MyFile’ )
       ...
       n = ftell( lunit )
       if ( n .lt. 0 ) stop ’ftell error’
       ...

示例:同上,但在 64 位环境中,使用 -m64 编译:


       INTEGER*4 lunit/1/
       INTEGER*8 ftell, n
       open( UNIT=lunit, FILE=’MyFile’ )
       ...
       n = ftell( lunit )
       if ( n .lt. 0 ) stop ’ftell error’
       ...

另请参见 fseek(3S) 和 perror(3F) 以及 fseeko64(3F) 和 ftello64(3F)。