fread fwrite 바이너리 파일 입출력 함수


fread fwrite 바이너리 파일 입출력 함수


이번에는 fread fwrite 함수에 대해서 알아보겠다.

fread fwrite 함수는 바이너리 파일 입출력 함수이다. 이 함수가 포함되어 있는 헤더 파일은 stdio.h 파일이다.

일단 코드를 보기 전에 함수의 원형을 보자.


1
2
3
4
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
//저장할 데이터의 시작 주소, 저장할 크기,  저장할 횟수,   파일 포인터
size_t fwrite(const void* buffer, size_t size, size_t count, FILE *stream);
//저장할 데이터의 시작 주소, 저장할 크기,  저장할 횟수,   파일 포인터
cs

함수의 원형은 이렇다.
첫 번째 인자에는 저장할 데이터의 시작 주소를 넣어주면 되고 저장할 크기, 저장할 횟수, 파일 포인터를 각각 넣어주면 된다.
이렇게 봐서는 모르니 코드를 한번 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
    int buffer1[5= { 0xff0x560x780xfa0xf1 };
    int buffer2[5];
 
    FILE *stream;
    fopen_s(&stream, "student.dat""wb");
    fwrite(buffer1, sizeof(int), 5, stream);
    fclose(stream);
 
    fopen_s(&stream, "student.dat""rb");
    fread(buffer2, sizeof(int), 5, stream);
    printf("%x %x %x %x %x\n", buffer2[0], buffer2[1], buffer2[2], buffer2[3], buffer2[4]);
 
    fclose(stream);
    return 0;
}
cs

먼저 파일을 wb(쓰기 모드)로 바이너리 파일을 연다.
그리고 fwrite로 student.dat 파일에 buffer1에 있는 데이터를 4바이트씩 5번을 넣는다.
그리고 파일을 rb(읽기 모드)로 바이너리 파일을 연다.
바이너리 파일 안에 있는 내용을 콘솔 창에 뿌려준다.
fread를 설명하자면 stream에서 4바이트씩 5번을 buffer2 배열에다가 넣어준다.

이렇게 하면 쉽게 설명이 됐다.


그리고 구조체를 활용해서 바이너리 입력과 출력을 해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int main()
{
    struct score
    {
        char name[20];
        double kor, eng, total;
    };
    typedef struct score STUDENT;
    STUDENT s, ss;
    FILE *stream;
 
    printf("1. 이름 입력 : ");
    scanf_s("%s", s.name, sizeof(s.name));
    printf("2. 국어 점수, 영어 점수 입력 : ");
    scanf_s("%lf %lf"&s.kor, &s.eng);
    s.total = s.kor + s.eng;
    fopen_s(&stream, "student.dat""wb");
    fwrite(&s, sizeof(s), 1, stream);
    fclose(stream);
 
    fopen_s(&stream, "student.dat""rb");
    fread(&ss, sizeof(ss), 1, stream);
    printf("%s %lf %lf %lf\n", ss.name, ss.kor, ss.eng, ss.total);
 
    return 0;
}
cs

처음에 이름과 국어 영어 점수를 입력을 한다.
그리고 바이너리 파일을 "wb"(쓰기모드)fwrite로 바이너리 파일에 입력을 시켜준다. 
s의 구조체 주소를 주고 s의 사이즈만큼 1번만 반복해서 바이너리 파일에 입력을 시킨다.

그리고 "rb"(읽기모드)로 바이너리 파일을 열고 fread로 바이너리 파일 값을 ss 주소에 ss바이트만큼 1번만 반복해서 넣어라.
이말이다. 그리고 printf로 콘솔 출력을 한다.

이렇게 정리를 했다.

댓글

Designed by JB FACTORY