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: 正常、n>0: システムエラーコード |
順編成ファイルでは、fseek に続く呼び出しのあとの出力操作 (WRITE など) は、fseek の位置に続くすべてのデータレコードの削除、新しいデータレコード (とファイルの終わりのマーク) での書き換えの原因となります。正しい位置へのレコードの書き換えは、直接アクセスファイルでのみ実行可能です。
例: fseek() - MyFile のポインタを先頭から 2 バイトの位置に再位置付けします。
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 エラー' 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 エラー' 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 エラー' ... |
例: 前述の例を 64 ビット環境で、-m64 を使ってコンパイルすると次のようになります。
INTEGER*4 lunit/1/ INTEGER*8 ftell, n open( UNIT=lunit, FILE='MyFile' ) ... n = ftell( lunit ) if ( n .lt. 0 ) stop 'ftell エラー' ... |
参照: fseek(3S)、perror(3F)、fseeko64(3F)、ftello64(3F)