Namespaces
Variants

fsetpos

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

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

新しい解析状態と位置を確立する他に、この関数の呼び出しは ungetc の効果を元に戻し、設定されている場合はファイル終端状態をクリアします。

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

目次

翻訳内容: - 「Contents」を「目次」に翻訳 - HTMLタグ、属性、リンク先、C++関連用語(Parameters、Return value、Notes、Example、References、See also)は翻訳せずに保持 - 数値、書式、構造は完全に維持

パラメータ

stream - 変更するファイルストリーム
pos - ファイル位置指示子の新しい値として使用する fpos_t オブジェクトへのポインタ

戻り値

0 成功時は0、それ以外の場合は非ゼロの値。

注記

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

fsetpos のエラーチェック付き使用例

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

出力例:

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

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.21.9.3 fsetpos関数 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.21.9.3 fsetpos関数 (p: TBD)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.21.9.3 fsetpos関数 (p: 337)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.19.9.3 fsetpos関数 (p: 303)
  • C89/C90規格 (ISO/IEC 9899:1990):
  • 4.9.9.3 fsetpos関数

関連項目

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