fread
|
헤더 파일에 정의됨
<stdio.h>
|
||
| (C99 이전) | ||
| (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 함수
참고 항목
|
(C11)
(C11)
(C11)
|
표준 입력, 파일 스트림 또는 버퍼에서 형식화된 입력을 읽어들임
(함수) |
|
파일 스트림에서 문자열을 가져옴
(함수) |
|
|
파일에 기록
(함수) |
|
|
C++ documentation
for
fread
|
|