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

先頭へ戻る

fsetpos関数

概要 ファイルポジションを設定する。
ヘッダ stdio.h
形式 int fsetpos(FILE* stream, const fpos_t* pos);
引数 stream 対象のストリーム。
pos fgetpos関数で取得したファイルポジションの値。
戻り値 成功したら 0、失敗したら 0以外を返す。
詳細 fgetpos関数で取得した情報に従って、ファイルポジションを変更する。また、ストリームに mbstate_t型のオブジェクトがあれば、その値も変更する。
成功すると、ファイル終了指示子をクリアされる(つまり、feof関数が偽を返すようになる)。また、ungetc関数によってバッファへ押し戻された文字もクリアされる。
読み取りエラーや書き込みエラーが発生することがあり、その場合、対象のストリームにエラー指示子がセットされる。
失敗した場合、errno に処理系定義の正の値が格納される。
注意 引数pos に渡す値は、同じストリームに対する fgetpos関数によって取得したものでなければならない。
使用例
#include <stdio.h>
#include <stdlib.h>

void printLine(FILE* fp);

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

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

    printLine( fp );
    fgetpos( fp, &pos );
    printLine( fp );
    printLine( fp );
    fsetpos( fp, &pos );
    printLine( fp );

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

    return 0;
}

void printLine(FILE* fp)
{
    char buf[80];

    fgets( buf, sizeof(buf), fp );
    printf( buf );
}

入力ファイル(test.txt)

aaaaa
bbbbb
ccccc
ddddd

実行結果:

aaaaa
bbbbb
ccccc
bbbbb
関連 この関数で取得できた値は、fsetpos関数に渡すことができる。
解説章 第41章


参考リンク

更新履歴

'2018/4/22 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

'2018/4/7 「詳細」に、mbstate_t やエラー指示子のセットに関する話題を追加。
本編の章立てが変わっていたので、「解説章」のリンク先を修正。

'2018/1/22 新規作成。





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

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

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

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS