ftell | Programming Place Plus C言語編 標準ライブラリのリファレンス

C言語編 標準ライブラリのリファレンス ftell

先頭へ戻る

ftell関数

概要 ファイルポジションを取得する。
ヘッダ stdio.h
形式 long int ftell(FILE* stream);
引数 stream 対象のストリーム。
戻り値 成功したらファイルポジションが返される。失敗したら -1L が返される。
ただし、-1L という値は有効なファイルポジションであり得る。そのため、エラーの確認には errno を使う必要がある。
詳細 返されるファイルポジションは、バイナリストリームでは、ファイルの先頭からの文字数である。テキストストリームの場合では、文字数と一致する保証はなく、fseek関数の第2引数へ、SEEK_SET とともに引き渡すことにしか使えない。
注意 失敗した場合、戻り値として -1L が返されるとともに、errno に何らかの正の値が格納される。エラーの確認には、errno を使うこと。
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE* fp;
    long int pos;

    fp = fopen( "test.txt", "r" );
    if( fp == NULL ){
        fputs( "ファイルオープンに失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }

    printf( "%c\n", fgetc( fp ) );
    printf( "%c\n", fgetc( fp ) );
    printf( "%c\n", fgetc( fp ) );

    /* ファイルポジションを取得 */
    errno = 0;
    pos = ftell( fp );
    if( pos == -1L && errno > 0 ){
        fputs( "ftell関数が失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }

    fseek( fp, 0, SEEK_SET );
    printf( "%c\n", fgetc( fp ) );

    /* ファイルポジションを戻す */
    fseek( fp, pos, SEEK_SET );
    printf( "%c\n", fgetc( fp ) );

    if( fclose( fp ) == EOF ){
        fputs( "ファイルクローズに失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }

    return 0;
}

入力ファイル(test.txt)

abcde

実行結果:

a
b
c
a
d
関連
解説章 第41章


参考リンク



更新履歴

'2018/4/8 全体的に文章を見直し修正。

'2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS