標準I/Oライブラリの位置決めフロー

2572 ワード

標準I/Oストリームを位置決めするには、3つの方法があります.
(1)ftellとfseek関数.この2つの関数はV 7以降存在するが、いずれもファイルの場所が1つのロング整数に格納できると仮定している.
(2)ftelloとfseeko関数.Single UNIX Specificationはこの2つの関数を導入し、ファイルオフセット量が必ずしもロング整数を使用する必要がないようにします.off_を使用しますtデータ型はロング整数型に代わった.
(3)fgetposとfsetpos関数.この2つの関数は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には2つの値しかありません.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の2つの関数は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環境高度プログラミング』(第2版)から抜粋し、個人学習記録としてのみ使用されている.本書についてはhttp://www.apuebook.com/を参照してください.