C/C++ 표준 라이브러리 함수 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)는 지정된 스트림(stream)에서 데이터를 읽어 ptr이 가리키는 메모리 배열에 저장하는 역할을 합니다. 주로 파일에서 구조체나 바이너리 데이터를 한 번에 읽어올 때 유용하게 사용됩니다.
fread() 함수 선언
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
매개변수 설명
아래 표는 fread() 함수의 각 매개변수와 그 역할을 정리한 것입니다.
| 매개변수 | 설명 |
|---|---|
| ptr | 읽어온 데이터를 저장할 메모리 블록을 가리키는 포인터입니다. 최소 size*nmemb 바이트 이상의 크기를 가져야 합니다. |
| size | 읽어들일 각 요소 하나의 크기(바이트 단위)입니다. |
| nmemb | 읽어들일 요소의 개수입니다. 각 요소는 size 바이트 크기를 가집니다. |
| stream | 입력 스트림을 지정하는 FILE 객체를 가리키는 포인터입니다. |
반환값
성공적으로 읽어온 요소의 총 개수가 size_t(정수 계열 데이터 타입) 형태로 반환됩니다. 만약 반환된 값이 nmemb 매개변수와 다르다면, 읽기 도중 오류가 발생했거나 파일의 끝(EOF)에 도달했다는 의미입니다. 따라서 실제 코드에서는 반환값을 반드시 확인하여 정상적으로 데이터를 읽었는지 검사하는 것이 좋습니다.
예제 코드
#include <stdio.h>
#include <string.h>
int main () {
FILE *fp;
char c[] = "this is tutorialspoint";
char buffer[100];
/* 파일을 읽기/쓰기 모드로 열기 */
fp = fopen("file.txt", "w+");
/* 파일에 데이터 쓰기 */
fwrite(c, strlen(c) + 1, 1, fp);
/* 파일 포인터를 파일의 시작 위치로 이동 */
fseek(fp, 0, SEEK_SET);
/* 데이터를 읽어 출력하기 */
fread(buffer, strlen(c)+1, 1, fp);
printf("%s\n", buffer);
fclose(fp);
return(0);
}위 프로그램을 컴파일하여 실행하면 먼저 file.txt라는 파일이 생성되고, "this is tutorialspoint"라는 문자열이 파일에 기록됩니다. 이후 fseek() 함수를 사용해 파일 포인터를 파일의 맨 앞으로 되돌린 뒤, fread()로 해당 내용을 버퍼에 읽어 들여 화면에 출력합니다.
실행 결과
this is tutorialspoint
이처럼 fread() 함수는 fwrite(), fseek()와 함께 사용하면 파일에 데이터를 기록한 후 다시 읽어오는 전형적인 파일 입출력 흐름을 손쉽게 구현할 수 있습니다.