반원 블로그

[C 프로그래밍] 파일 출력 함수_2.바이너리 모드 본문

2017/C 프로그래밍

[C 프로그래밍] 파일 출력 함수_2.바이너리 모드

반원_SemiCircle 2017. 2. 19. 00:11

#1 바이너리 모드의 특징
- 메모리에 저장된 2진수(binary)값을 직접 읽고 쓴다.
- 변수를 파일에 저장하려면, 바이너리 값을 쓰고 읽으면 된다.
- 바이너리 값을 파일에 읽고 쓰려면, b 를 붙여주면 된다.(rb, wb)

//바이너리 읽기 모드
fopen("data.txt","rb");
//바이너리 쓰기 모드
fopen("data.txt","wb");


#2 바이너리 값을 사용하는 방법이 문자열을 다루는 것과 다르다.
//바이너리 파일 읽어오기
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
//바이너리 파일에 쓰기
size_t fwrite( void *ptr, size_t size, size_t nitems, FILE *stream);

#3 구조체 구조를 파일을 저장하기
- 바이너리 정보를 저장하면 구조체를 저장 할 수 있다.

연습 3-1
1. 정수형 필드 변수 val1, 부동소수형 필드 변수 val2를 가진 Node를 하나 선언하자.

#include <stdio.h>
#include <stdlib.h>

struct Node{
    int val;
    float val2;
}

2. 1을 토대로 다음 코드를 작성한다.

void main(){
    FILE *fp; //파일 포인터 선언
    struct Node *item; //구조체 변수 선언

    fp = fopen("data.txt","wb"); //data.txt 파일을 바이너리 쓰기 모드로 오픈

    //구조체 값 설정
    item = (struct Node*)malloc(sizeof(struct Node));
    item->val1 = 1;
    item->val2 = 2.1f;

    //구조체의 값을 파일에 저장
    fwrite((void*)item, sizeof(struct Node), 1, fp);

    //파일 포인터 해제
    fclose(fp);
}


#4 파일에 저장되어 있는 값 읽어오기


연습 4-1

void main(){
    // 파일 포인터 선언
    FILE *fp;
    struct Node *item;

    // data.txt 파일을 바이너리 읽기 모드로 오픈
    fp = fopen("data.txt", "rb");

    // 파일에서 읽어온 값을 구조체에 저장
    item = (struct Node*)malloc(sizeof(struct Node));
    fread((void*)item, sizeof(struct Node), 1, fp);

    //파일에서 불러온 구조체의 값을 화면에 출력
    printf(" item->val1 = %d\n", item->val1);
    printf(" item->val2 = %.2f\n", item->val2);

    fclose(fp); //파일 포인터 해제
}



#5 다음 포스팅에서는 연결 리스트를 파일에 저장하고 불러오는 방법을 다룬다.

Comments