<シーケンシャルアクセスとランダムアクセス>
ファイルの先頭から順番に読み書きを行うことを「シーケンシャルアクセス」といいます。これに対して、ファイル内の任意の場所に読み書きすることを「ランダムアクセス」といいます。
現在のファイル内でのアクセス位置(先頭から何バイト目にアクセスしているか)は、FILE構造体の中の「ファイル位置指示子」で管理されています。テキストファイルでもバイナリファイルでも、fputsやfreadなどのファイル入出力関数は皆、ファイル位置指示子を自動的に進めてくれます。従って、シーケンシャルに読み書きしていくプログラムでは、とくにファイル内の位置を意識する必要はありません。
ランダムアクセスをする場合、fseek関数を使ってファイル位置指示子を動かすことができます。
fseek関数:ファイル位置指示子をセットする
形式: int fseek(FILE *fp,
long offset, int origin);
機能: fpが指すファイルのファイル位置指示子を,originを基準としてoffsetバイト移動する.なお,fseek関数の呼び出し成功で,ファイル終了指示子をクリアする.
origin: SEEK_SET:ファイルの先頭
SEEK_CUR:ファイル内の現在地
SEEK_END:ファイルの終端
返値: 正常時:0
異常時:非0
また、ftell関数を使って現在のファイル位置指示子の値を調べることもできます。
ftell関数:ファイル位置指示子の値を調べる
形式: long ftell(FILE *fp);
機能: fpが指すファイルのファイル位置指示子の値を返す.
返値: 正常値:ファイル位置
異常時:-1L