Namespaces
Variants

fgetpos

From cppreference.net
< c ‎ | io
定義先ヘッダ <stdio.h>
int fgetpos ( FILE * stream, fpos_t * pos ) ;
(C99まで)
int fgetpos ( FILE * restrict stream, fpos_t * restrict pos ) ;
(C99以降)

ファイルストリーム stream のファイル位置指示子と現在の解析状態(存在する場合)を取得し、 pos が指すオブジェクトに格納します。格納される値は fsetpos への入力としてのみ意味を持ちます。

目次

パラメータ

stream - 検査対象のファイルストリーム
pos - ファイル位置指示子を格納する fpos_t オブジェクトへのポインタ

戻り値

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

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    // double型の4つの値を保持するファイルを準備
    enum {SIZE = 4};
    FILE* fp = fopen("test.bin", "wb");
    assert(fp);
    int rc = fwrite((double[SIZE]){1.1, 2.2, 3.3, 4.4}, sizeof(double), SIZE, fp);
    assert(rc == SIZE);
    fclose(fp);
    // fsetposを使用してファイルの先頭に戻るデモ
    fp = fopen("test.bin", "rb");
    fpos_t pos;
    fgetpos(fp, &pos);               // ファイルの先頭をposに保存
    double d;
    rc = fread(&d, sizeof d, 1, fp); // 最初のdoubleを読み取り
    assert(rc == 1);
    printf("First value in the file: %.1f\n", d);
    fsetpos(fp,&pos);                // ファイル位置をファイルの先頭に戻す
    rc = fread(&d, sizeof d, 1, fp); // 最初のdoubleをもう一度読み取り
    assert(rc == 1);
    printf("First value in the file again: %.1f\n", d);
    fclose(fp);
    // エラー処理のデモ
    rc = fsetpos(stdin, &pos);
    if (rc)
        perror("could not fsetpos stdin");
}

出力:

First value in the file: 1.1
First value in the file again: 1.1
could not fsetpos stdin: Illegal seek

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.21.9.1 fgetpos関数 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.21.9.1 fgetpos関数 (p: TBD)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.21.9.1 fgetpos関数 (p: 336)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.19.9.1 fgetpos関数 (p: 302)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.9.9.1 fgetpos関数

関連項目

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