fseek 和 ftell 是用于实现文件复位的例程。ftell 返回文件的当前位置,以距文件开头的字节偏移量表示。在程序中后面某处,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 |
该函数的调用方式如下所示:
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)。