名前空間
変種
操作

fsetpos

From cppreference.com
< c‎ | io
 
 
ファイル入出力
型とオブジェクト
        
関数
ファイルアクセス
(C95)
非書式化入出力
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

書式付き入力
直接入出力
書式付き出力
ファイルポジショニング
fsetpos

エラーハンドリング
ファイル操作
 
ヘッダー <stdio.h> で定義
int fsetpos( FILE* stream, const fpos_t* pos );

stream というファイルストリームのファイル位置指示子と、(もしあれば)マルチバイト解析状態を、pos が指す値に従って設定します。

新しい解析状態と位置を設定することに加えて、この関数を呼び出すと ungetc の効果が取り消され、設定されている場合、ファイル終了状態がクリアされます。

読み書きエラーが発生した場合、ストリームのエラー指示子 (ferror) が設定されます。

目次

[編集] パラメータ

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

[編集] 戻り値

成功した場合は 0、それ以外の場合はゼロ以外の値を返します。

[編集] 注記

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

[編集]

エラーチェック付きの `fsetpos`

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    // Prepare an array of FP (floating-point) values.
    #define SIZE 5
    double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0};
    // Write array to a file.
    FILE * fp = fopen("test.bin", "wb");
    fwrite(A,sizeof(double),SIZE,fp);
    fclose (fp);
 
    // Read the FP values into array B.
    double B[SIZE];
    fp = fopen("test.bin","rb");
    fpos_t pos;
    if (fgetpos(fp, &pos)) // current position: start of file
    {
        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); // read one FP value
    // current position: after reading one f-p value
    printf("%.1f; read count = %d\n", B[0], ret_code); // print one FP value and ret_code
 
    if (fsetpos(fp, &pos)) // reset current position to start of file
    {
        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); // reread first FP value
    printf("%.1f; read count = %d\n", B[0], ret_code); // print one FP value and 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 The fsetpos function (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.21.9.3 The fsetpos function (p: TBD)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.21.9.3 The fsetpos function (p: 337)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.19.9.3 The fsetpos function (p: 303)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.9.9.3 The fsetpos function

[編集] 関連項目

ファイル位置指示子を取得する
(関数) [編集]
現在のファイル位置指示子を返す
(関数) [編集]
ファイル位置指示子をファイル内の特定の場所に移動する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)