Namespaces
Variants

fsetpos

From cppreference.net
< c ‎ | io
헤더 파일에 정의됨 <stdio.h>
int fsetpos ( FILE * stream, const fpos_t * pos ) ;

파일 스트림 stream 의 파일 위치 지시자와 멀티바이트 파싱 상태(있는 경우)를 pos 가 가리키는 값에 따라 설정합니다.

새로운 파싱 상태와 위치를 설정하는 것 외에, 이 함수를 호출하면 ungetc 의 효과를 취소하고, 설정되어 있는 경우 파일 끝(end-of-file) 상태를 지웁니다.

읽기 또는 쓰기 오류가 발생하면 스트림의 오류 표시기( ferror )가 설정됩니다.

목차

매개변수

stream - 수정할 파일 스트림
pos - 파일 위치 지시자의 새 값으로 사용할 fpos_t 객체에 대한 포인터

반환값

0 성공 시 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); // 하나의 FP 값 읽기
    // 현재 위치: 하나의 부동 소수점 값 읽은 후
    printf("%.1f; read count = %d\n", B[0], ret_code); // 하나의 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); // 하나의 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 함수

참고 항목

파일 위치 표시자를 얻음
(함수)
현재 파일 위치 표시자를 반환
(함수)
파일 위치 표시자를 파일의 특정 위치로 이동
(함수)