ftell() — ftello() — 現在位置の取得

フォーマット

#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 の値は、次のいずれかに設定されます。

意味
ENODEV
誤ったデバイスに対して操作が試行されました。
ENOTOPEN
ファイルはオープンされていません。
ENUMMBRS
ファイルは複数メンバー処理用にオープンしています。
ENUMRECS
レコードが多すぎます。
ERECIO
ファイルはレコードの入出力用にオープンしています。
ESTDERR
stderr をオープンできません。
ESTDIN
stdin をオープンできません。
ESTDOUT
stdout をオープンできません。
EIOERROR
リカバリー不能な入出力エラーが発生しました。
EIORECERR
リカバリー可能な入出力エラーが発生しました。

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);
}

関連情報



[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]