フォーマット
#include <stdio.h> long int ftell(FILE *stream); off_t ftello(FILE *stream);
言語レベル: ANSI
スレッド・セーフ: はい。
統合ファイル・システム・インターフェース: ftello() 関数は、コンパイル・コマンドに対して SYSIFCOPT(*NOIFSIO) が指定されている場合は使用できません。
説明
ftell() および ftello() 関数は、stream と関連付けられたファイルの現在位置を検索します。固定長バイナリー・ファイルの場合、戻される値は stream の先頭に相対的なオフセットです。
QSYS ライブラリー・システムのファイルの場合、ftell() および ftello() 関数は、固定形式のバイナリー・ファイルに対しては相対値を、他のファイル・タイプに対してはエンコード値を戻します。 このエンコード値は、ファイルの先頭以外の位置に対する fseek() 関数および fseeko() 関数の呼び出しで使用される必要があります。
戻り値
ftell() 関数および ftello() 関数はファイルの現在位置を戻します。 エラーの場合、ftell() および ftello() はそれぞれ -1, long へキャスト および off_t を戻し、errno にゼロ以外の値を設定します。
errno の値は、次のいずれかに設定されます。
ftell() 関数および ftello() 関数は、type=record でオープンされたファイルではサポートされていません。
ftell() の使用例
次の例は読み取り用にファイル mylib/myfile をオープンします。 バッファーの半分を埋めるに十分な文字を読み取り、ストリームおよびバッファー内の位置を出力します。
#include <stdio.h> #define NUM_ALPHA 26 #define NUM_CHAR 6 int main(void) { FILE * stream; int i; char ch; char buffer[NUM_ALPHA]; long position; if (( stream = fopen("mylib/myfile", "r")) != NULL ) { /* read into buffer */ for ( i = 0; ( i < NUM_ALPHA/2 ) && ((buffer[i] = fgetc(stream)) != EOF ); ++i ) if (i==NUM_CHAR-1) /* We want to be able to position the */ /* file pointer to the character in */ /* position NUM_CHAR */ position = ftell(stream); buffer[i] = '¥0'; } printf("Current file position is %d¥n", position); printf("Buffer contains: %s¥n", buffer); }
関連情報