Namespaces
Variants

std:: fsetpos

From cppreference.net
< cpp ‎ | io ‎ | c
ヘッダーで定義 <cstdio>
int fsetpos ( std:: FILE * stream, const std:: fpos_t * pos ) ;

Cファイルストリーム stream のファイル位置指示子とマルチバイト解析状態(存在する場合)を、 pos が指す値に従って設定します。

新しい解析状態と位置を確立する他に、この関数の呼び出しは std::ungetc の効果を元に戻し、設定されている場合はend-of-file状態をクリアします。

読み取りまたは書き込みエラーが発生した場合、ストリームのエラーインジケータ( std::ferror )が設定されます。

目次

パラメータ

stream - 変更するファイルストリーム
pos - 同じファイルに関連付けられたストリームで std::fgetpos を呼び出して取得した fpos_t オブジェクトへのポインタ

戻り値

0 成功時は0、それ以外の場合は非ゼロの値を返します。また、失敗時には errno を設定します。

注記

ワイドストリームで非終端位置にシークした後、任意の出力関数を次に呼び出すと、例えば異なる長さのマルチバイトシーケンスを出力することによって、ファイルの残りの部分が未定義状態になる可能性があります。

#include <cstdio>
#include <cstdlib>
int main()
{
    // 浮動小数点値の配列を準備
    const int SIZE = 5;
    double A[SIZE] = {1., 2., 3., 4., 5.};
    // 配列をファイルに書き込み
    std::FILE * fp = std::fopen("test.bin", "wb");
    std::fwrite(A, sizeof(double), SIZE, fp);
    std::fclose(fp);
    // 値を配列Bに読み込み
    double B[SIZE];
    fp = std::fopen("test.bin", "rb");
    std::fpos_t pos;
    if (std::fgetpos(fp, &pos) != 0)      // 現在位置: ファイル先頭
    {
       std::perror("fgetpos()");
       std::fprintf(stderr, "fgetpos() failed in file %s at line # %d\n",
                    __FILE__, __LINE__-3);
       std::exit(EXIT_FAILURE);
    }
    int ret_code = std::fread(B, sizeof(double), 1, fp);      // 1つの値を読み込み
    // 現在位置: 1つの値を読み込んだ後
    std::printf("%.1f; read count = %d\n", B[0], ret_code);   // 1つの値とret_codeを表示
    if (std::fsetpos(fp, &pos) != 0)   // 現在位置をファイル先頭にリセット
    {
       if (std::ferror(fp))
       {
          std::perror("fsetpos()");
          std::fprintf(stderr, "fsetpos() failed in file %s at line # %d\n",
                       __FILE__, __LINE__-5);
          std::exit(EXIT_FAILURE);
       }
    }
    ret_code = std::fread(B, sizeof(double), 1, fp);         // 最初の値を再読み込み
    std::printf("%.1f; read count = %d\n", B[0], ret_code);  // 1つの値とret_codeを表示
    std::fclose(fp);
    return EXIT_SUCCESS; 
}

出力:

1.0; read count = 1
1.0; read count = 1

関連項目

ファイル位置指示子を取得する
(関数)
現在のファイル位置指示子を返す
(関数)
ファイル位置指示子をファイル内の特定の位置に移動する
(関数)