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

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

トップページ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);
    }
}

入力ファイル(test.txt)

abcde

実行結果:

a
b
c
a
d

関連

解説章

第41章


参考リンク


更新履歴

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

’2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る