ftell ()-ftello ()- 現在位置の取得
形式
#include <stdio.h>
long int ftell(FILE *stream);
off_t ftello(FILE *stream);言語レベル
ANSI
スレッド・セーフ
はい
統合ファイル・システム・インターフェース
コンパイル・コマンドで SYSIFCOPT(*NOIFSIO) が指定されている場合、ftello() 関数は使用できません。
説明
ftell() 関数と ftello() 関数は、 streamに関連付けられたファイルの現在位置を検索します。 固定長バイナリー・ファイルの場合、戻される値は stream の先頭に相対的なオフセットです。
QSYS ライブラリー・システム内のファイルの場合、 ftell() 関数および ftello() 関数は、固定形式バイナリー・ファイルの場合は相対値を返し、その他のファイル・タイプの場合はエンコード値を返します。 このエンコードされた値は、ファイルの先頭以外の位置に対する fseek() および fseeko() 関数の呼び出しで使用する必要があります。
戻り値
ftell() 関数と ftello() 関数は、現在のファイル位置を返します。 エラーの場合、 ftell() と ftello() はそれぞれ –1,
cast to long と off_t を返し、 errno をゼロ以外の値に設定します。
errno の値は、次のいずれかに設定されます。
- 値
- 意味
- ENODEV
- 誤ったデバイスに対して操作が試行されました。
- ENOTOPEN
- ファイルはオープンされていません。
- ENUMMBRS
- ファイルは複数メンバー処理用にオープンしています。
- ENUMRECS
- レコードが多すぎます。
- ERECIO
- ファイルはレコードの入出力用にオープンしています。
- ESTDERR
stderrをオープンできません。- ESTDIN
stdinをオープンできません。- ESTDOUT
stdoutをオープンできません。- EIOERROR
- 回復不能入出力エラーが起こりました。
- EIORECERR
- 回復可能入出力エラーが起こりました。
ftell() 関数と ftello() 関数は、 type=recordでオープンされたファイルではサポートされません。
例
次の例は読み取り用にファイル 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);
}