先頭へ戻る

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

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(名前順)

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(ヘッダ別)

先頭へ戻る


ftell関数

概要

ファイルポジションを取得する。

ヘッダ

stdio.h

形式

long int ftell(FILE* stream);

引数

stream

対象のストリーム。

戻り値

成功したらファイルポジションが返される。失敗したら -1L が返される。

失敗した場合、errno に処理系定義の正の値が書き込まれる。

詳細

返されるファイルポジションは、バイナリストリームでは、ファイルの先頭からの文字数である。テキストストリームの場合では、文字数と一致する保証はなく、fseek関数の第2引数へ、SEEK_SET とともに引き渡すことにしか使えない。

注意

使用例

#include <stdio.h>
#include <stdlib.h>

char get_char(FILE* fp)
{
    int c = fgetc( fp );
    if( c == EOF ){
        if( feof(fp) || ferror(fp) ){
            fputs( "ファイルからの読み込みに失敗しました。\n", stderr );
            exit( EXIT_FAILURE );
        }
    }
    return (char)c;
}

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

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

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

    if( fseek( fp, 0, SEEK_SET ) != 0 ){
        fputs( "ファイルポジションの移動に失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }
    printf( "%c\n", get_char( fp ) );

    // ファイルポジションを戻す
    if( fseek( fp, pos, SEEK_SET ) != 0 ){
        fputs( "ファイルポジションの移動に失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }
    printf( "%c\n", get_char( 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 に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー