Namespaces
Variants

fread

From cppreference.net
< c ‎ | io
헤더 파일에 정의됨 <stdio.h>
size_t fread ( void * buffer, size_t size, size_t count,
FILE * stream ) ;
(C99 이전)
size_t fread ( void * restrict buffer, size_t size, size_t count,
FILE * restrict stream ) ;
(C99 이후)

최대 count 개의 객체를 배열 buffer 로 읽어들입니다. 주어진 입력 스트림 stream 에서 각 객체마다 fgetc size 회 호출하는 것처럼 동작하며, 얻어진 결과를 순서대로 buffer 의 연속된 위치에 저장합니다. 이때 unsigned char 배열로 재해석됩니다. 스트림의 파일 위치 지시자는 읽은 문자 수만큼 전진합니다.

오류가 발생하면 스트림에 대한 파일 위치 지시자의 결과 값은 정의되지 않습니다. 부분 요소가 읽히면 그 값은 정의되지 않습니다.

목차

매개변수

buffer - 읽은 객체가 저장될 배열에 대한 포인터
size - 객체의 바이트 단위 크기
count - 읽을 객체의 개수
stream - 읽을 스트림

반환값

성공적으로 읽은 객체 수로, 오류나 파일 끝 조건이 발생하면 count 보다 적을 수 있습니다.

만약 size 또는 count 가 0이면, fread 는 0을 반환하고 다른 동작을 수행하지 않습니다.

fread 는 파일 끝과 오류를 구분하지 않으며, 호출자는 feof ferror 를 사용하여 어느 상황이 발생했는지 확인해야 합니다.

예제

#include <stdio.h>
enum { SIZE = 5 };
int main(void)
{
    const double a[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0};
    printf("Array has size %ld bytes, element size: %ld\n", sizeof a, sizeof *a);
    FILE *fp = fopen("test.bin", "wb"); // must use binary mode
    fwrite(a, sizeof *a, SIZE, fp); // writes an array of doubles
    fclose(fp);
    double b[SIZE];
    fp = fopen("test.bin","rb");
    const size_t ret_code = fread(b, sizeof b[0], SIZE, fp); // reads an array of doubles
    if (ret_code == SIZE)
    {
        printf("Array at %p read successfully, contents:\n", (void*)&a);
        for (int n = 0; n != SIZE; ++n)
            printf("%f ", b[n]);
        putchar('\n');
    }
    else // error handling
    {
        if (feof(fp))
            printf("Error reading test.bin: unexpected end of file\n");
        else if (ferror(fp))
            perror("Error reading test.bin");
    }
    fclose(fp);
}

가능한 출력:

Array has size 40 bytes, element size: 8
Array at 0x1337f00d6960 read successfully, contents:
1.000000 2.000000 3.000000 4.000000 5.000000

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.21.8.1 fread 함수 (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.21.8.1 fread 함수 (p: 243-244)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.21.8.1 fread 함수 (p: 335)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.19.8.1 fread 함수 (p: 301)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.9.8.1 fread 함수

참고 항목

표준 입력, 파일 스트림 또는 버퍼에서 형식화된 입력을 읽어들임
(함수)
파일 스트림에서 문자열을 가져옴
(함수)
파일에 기록
(함수)