C 언어 fread 함수 사용법

C 언어 fread 함수 사용법

fread 함수는 C 언어에서 바이너리 형식으로 데이터를 파일에서 읽어올 때 사용되는 함수입니다. 파일 입출력을 다룰 때 매우 유용하게 활용되며, 특히 구조체나 버퍼 단위로 데이터를 읽을 때 자주 사용됩니다.


1. 함수 원형

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

매개변수 설명:

  • ptr: 읽은 데이터를 저장할 메모리 버퍼의 포인터
  • size: 읽을 데이터 단위의 크기 (바이트 단위)
  • count: 읽을 데이터 단위의 개수
  • stream: 파일 포인터 (fopen으로 연 파일)

반환값: 실제로 읽은 데이터 단위의 개수 (예: count보다 작을 수 있음)


2. 기본 사용 예제

#include <stdio.h>

int main() {
    FILE *fp;
    char buffer[20];

    fp = fopen("example.txt", "rb");
    if (fp == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    size_t result = fread(buffer, sizeof(char), sizeof(buffer), fp);
    printf("읽은 바이트 수: %zu\n", result);
    buffer[result] = '\0'; // 문자열 종료 문자
    printf("읽은 내용: %s\n", buffer);

    fclose(fp);
    return 0;
}

출력 예시:

읽은 바이트 수: 18
읽은 내용: Hello, fread demo

3. 구조체 읽기 예제

#include <stdio.h>

typedef struct {
    int id;
    float score;
} Student;

int main() {
    FILE *fp;
    Student s;

    fp = fopen("student.dat", "rb");
    if (fp == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    if (fread(&s, sizeof(Student), 1, fp) == 1) {
        printf("ID: %d, 점수: %.2f\n", s.id, s.score);
    } else {
        printf("데이터 읽기 실패\n");
    }

    fclose(fp);
    return 0;
}

4. 주의할 점

  1. 파일 모드: fread는 바이너리 파일에서 사용되는 함수이므로 파일을 열 때 "rb" 또는 "rb+" 모드를 사용하는 것이 좋습니다.
  2. 파일 끝 처리: feof 함수를 사용해 파일 끝(EOF) 여부를 확인할 수 있습니다.
  3. 에러 처리: ferror 함수로 에러 여부를 검사할 수 있습니다.
  4. 읽은 개수 확인: 반환값이 요청한 count보다 적으면 파일 끝에 도달했거나 에러가 발생했을 수 있습니다.

5. 결론

fread 함수는 파일에서 데이터를 블록 단위로 효율적으로 읽을 수 있게 해주는 매우 유용한 함수입니다. 특히 구조체나 버퍼 데이터를 읽을 때 자주 사용되며, fwrite와 함께 파일 입출력을 처리할 때 필수적으로 알아두어야 할 함수입니다. 올바른 사용법과 주의사항을 숙지하여 안정적인 프로그램을 작성해보세요!