fread 함수

size_t fread ( void * base, size_t size, size_t count, FILE * fp); 파일 스트림에서 데이터를 읽는 함수

입력 매개 변수 리스트

base 데이터를 읽어올 버퍼

size 읽어올 데이터 하나의 크기

count 읽어올 데이터 개수

fp 입력 파일 스트림

반환 값

읽어온 데이터 개수

fread 함수는 요청한 데이터 개수보다 반환 값이 작다고 오류가 아니며 파일에 데이터를 모두 읽어온 것입니다.

사용 예

//C언어 표준 라이브러리 함수 가이드
//size_t fwrite ( const void * base, size_t size, size_t count, FILE * fp); 파일 스트림에 데이터를 쓰는 함수
//회원 데이터 배열의 내용을 파일에 기록하고 다시 읽어와서 출력
#include <stdio.h>

#define MAX_NAME_LEN    20
typedef struct {
    char name[MAX_NAME_LEN + 1];
    int age;
}Member;

#define MAX_MEMBERS 10
int main(void)
{
    FILE * fp;
    int i;
    Member members[MAX_MEMBERS] =
    {
        { "홍길동",20 },{ "강감찬",15 },{ "을지문덕",22 },{ "이순신",19 },{ "김구",30 },
        { "안중근",30 },{ "박찬호",35 },{ "김연아",17 },{ "아이유",20 },{ "주니엘",20 }
    };
    Member members2[MAX_MEMBERS];

    //쓰기 모드로 파일 열기
    fopen_s(&fp, "data.txt", "wb");
    if (fp == NULL)
    {
        perror("error fopen");
        return;
    }
    //출력 파일 스트림에 members 배열의 내용 출력
    if (fwrite(members, sizeof(Member), MAX_MEMBERS, fp) != MAX_MEMBERS)
    {
        printf("출력 오류\n");
        return;
    }
    fclose(fp);//출력 파일 스트림 닫기

               //읽기 모드로 파일 열기
    fopen_s(&fp, "data.txt", "rb");
    if (fp == NULL)
    {
        perror("error fopen");
        return;
    }

    //파일에서 members2 배열로 데이터 읽기
    fread(members2, sizeof(Member), MAX_MEMBERS, fp);
    //읽어온 데이터 출력
    printf("%-10s %-10s\n", "이름", "나이");
    for (i = 0; i<MAX_MEMBERS; i++)
    {
        printf("%-10s %-10d\n", members2[i].name, members2[i].age);
    }
    fclose(fp); //입력 파일 스트림 닫기
    return 0;
}

출력

이름      나이
홍길동    20
강감찬    15
을지문덕  22
이순신    19
김구      30
안중근    30
박찬호    35
김연아    17
아이유    20
주니엘    20

새로 만들어진 output.txt 내용

홍길동               儆?   강감찬               儆?   을지문덕             儆?   이순신               
儆?   김구                 儆?   안중근               儆?   박찬호               儆?   김연아       
儆?   아이유               儆?   주니엘               儆?