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

先頭へ戻る

fseek関数

概要 ファイルポジションを変更する。
ヘッダ stdio.h
形式 int fseek(FILE* stream, long int offset, int origin);
引数 stream 対象のストリーム。
offset 移動量。
origin 移動の原点を表す値。以下のいずれかを指定する。
SEEK_SET はファイルの先頭、SEEK_CUR は現在の位置、SEEK_END はファイルの終端を表す。ただし、規格上保証された第2引数との組み合わせのパターンは少ないので注意すること(「注意」の項を参照)
戻り値 成功したら 0、失敗したら 0以外を返す。
詳細 ファイルポジションを移動する。
この関数が成功した場合、対象のストリームのファイル終了指示子がクリアされる(つまり、feof関数が偽を返すような状態に戻される)。また、ungetc関数によって押し戻されていた文字はクリアされる。
読み取りエラーや書き込みエラーが発生すると、ストリームのエラー指示子がセットされて、この関数は失敗する。
注意 対象がバイナリストリームの場合、第3引数に SEEK_END を指定した際の動作には保証がない。
対象がテキストストリームの場合、第3引数を SEEK_CUR、SEEK_END を指定した場合には、第2引数は 0以外保証されない。SEEK_SET を指定した場合には、第2引数には ftell関数で受け取った値を指定する。
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE* fp;

    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 ) );
    fseek( fp, 0, 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
関連 現在のファイルポジションを ftell関数で取得できる。また、移動量が大きすぎて long int型で表現できない場合、fsetpos関数が利用できる。
解説章 第41章


参考リンク



更新履歴

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

'2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ


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