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, 그렇지 않으면 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 The fgetpos function

참고 항목

현재 파일 위치 지시자를 반환합니다
(함수)
파일 위치 지시자를 파일의 특정 위치로 이동합니다
(함수)
파일 위치 지시자를 파일의 특정 위치로 이동합니다
(함수)