`fgetpos` 함수
fgetpos 함수 (fgetpos)
파일에 저장된 값을 다시 읽으려면 어디까지 읽었는지 위치를 기억해 두어야 할 때가 있어요. fgetpos는 파일 위치 표시자(file position indicator)와 파싱 상태를 fpos_t 객체에 저장해 두는 함수예요. 저장한 값을 사용해 나중에 다시 그 위치로 돌아갈 수 있어요.
출처: cppreference
본문
함수 원형
<stdio.h>에 정의돼 있어요.
int fgetpos( FILE* stream, fpos_t* pos ); // (until C99)
int fgetpos( FILE* restrict stream, fpos_t* restrict pos ); // (since C99)
설명 (Explanation)
파일 스트림 stream의 파일 위치 표시자와 현재 파싱 상태(있다면)를 얻어 pos가 가리키는 객체에 저장해요. 저장된 값은 오직 fsetpos의 입력으로만 의미가 있어요.
매개변수 (Parameters)
stream— 조사할 파일 스트림pos— 파일 위치 표시자를 저장할fpos_t객체를 가리키는 포인터
반환값 (Return value)
성공하면 0, 실패하면 0이 아닌 값을 돌려줘요.
예제 (Example)
이진 파일을 열고, fgetpos로 파일 시작 위치를 기억해 두었다가 fsetpos로 되돌아가는 예시예요. 오류 처리까지 함께 보여 줘요.
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
// prepare a file holding 4 values of type double
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);
// demo using fsetpos to return to the beginning of a file
fp = fopen("test.bin", "rb");
fpos_t pos;
fgetpos(fp, &pos); // store start of file in pos
double d;
rc = fread(&d, sizeof d, 1, fp); // read the first double
assert(rc == 1);
printf("First value in the file: %.1f\n", d);
fsetpos(fp,&pos); // move file position back to the start of the file
rc = fread(&d, sizeof d, 1, fp); // read the first double again
assert(rc == 1);
printf("First value in the file again: %.1f\n", d);
fclose(fp);
// demo error handling
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
fsetpos를 stdin에 호출해 보면, 오류가 나면 0이 아닌 값을 돌려주고 perror로 메시지를 출력하는 흐름을 볼 수 있어요.
같이 보기 (See also)
ftell— 현재 파일 위치 표시자 반환fseek— 파일 위치 표시자를 특정 위치로 이동fsetpos— 파일 위치 표시자를 특정 위치로 이동