#include <stdio.h>
int main(void){
FILE *afp, *bfp;
int num = 10, res;
afp = fopen("a.txt", "wt");
fprintf(afp, "%d", num);
bfp = fopen("b.txt", "wb");
fwrite(&num, sizeof(num), 1, bfp);
fclose(afp);
fclose(bfp);
bfp = fopen("b.txt", "rb");
fread(&res, sizeof(res), 1, bfp);
printf("%d", res);
fclose(bfp);
return 0;
}
### 코드 설명
- `FILE *afp, *bfp;`는 파일 작업에 사용될 파일 포인터 `afp`와 `bfp`를 선언합니다.
- `int num = 10, res;`는 파일에 쓸 정수 `num`과 파일로부터 읽을 정수를 저장할 변수 `res`를 선언하고, `num`을 10으로 초기화합니다.
- `afp = fopen("a.txt", "wt");`는 "a.txt" 파일을 텍스트 쓰기 모드로 엽니다. `"wt"` 모드는 텍스트 모드에서 쓰기를 의미합니다.
- `fprintf(afp, "%d", num);`는 `afp` 파일 포인터가 가리키는 파일에 `num` 변수의 값을 텍스트 형식으로 씁니다.
- `bfp = fopen("b.txt", "wb");`는 "b.txt" 파일을 바이너리 쓰기 모드로 엽니다. `"wb"` 모드는 바이너리 모드에서 쓰기를 의미합니다.
- `fwrite(&num, sizeof(num), 1, bfp);`는 `bfp` 파일 포인터가 가리키는 파일에 `num` 변수의 값을 바이너리 형식으로 씁니다. 여기서 `&num`은 `num`의 메모리 주소, `sizeof(num)`은 `num`의 크기, `1`은 쓰기를 수행할 항목의 개수입니다.
- `fclose(afp);`와 `fclose(bfp);`는 각각 열린 "a.txt"와 "b.txt" 파일을 닫습니다.
- 파일을 닫은 후 "b.txt" 파일을 바이너리 읽기 모드로 다시 엽니다: `bfp = fopen("b.txt", "rb");`.
- `fread(&res, sizeof(res), 1, bfp);`는 "b.txt" 파일로부터 `res` 변수에 바이너리 형식으로 값을 읽어옵니다.
- `printf("%d", res);`는 읽어온 `res` 값을 출력합니다.
- 마지막으로 `fclose(bfp);`는 "b.txt" 파일을 닫습니다.
### 텍스트 모드와 바이너리 모드의 차이
- 텍스트 모드(`"wt"`)로 파일에 쓰기를 수행하면, 숫자 `10`은 문자열 형태로 저장됩니다. 예를 들어, `10`이라는 숫자는 '1'과 '0'이라는 두 문자로 파일에 쓰여집니다.
- 바이너리 모드(`"wb"`)로 파일에 쓰기를 수행하면, 숫자 `10`은 해당 숫자를 나타내는 바이트(또는 바이트들)로 저장됩니다. 따라서 이후 바이너리 모드(`"rb"`)로 읽기를 수행하면 정확히 같은 숫자 값 `10`을 얻을 수 있습니다.
이 예제는 파일에 데이터를 쓰고 읽는 두 가지 다른 모드(텍스트 모드와 바이너리 모드)를 보여주며, 특히 바이너리 모드를 사용할 때 데이터가 어떻게 저장되고 다시 정확히 같은 형태로 읽혀지는지를 설명합니다.
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 18) 다양한 자료형을 형식에 맞게 입출력 (2) | 2024.10.09 |
---|---|
chapter 18) stdin과 stdout을 사용한 문자 입출력 (7) | 2024.10.08 |
chapter 18) a+ 모드로 파일의 내용을 확인하며 출력 (0) | 2024.10.06 |
chapter 17) 최고 학점의 학생 데이터 출력 (0) | 2024.10.05 |
chapter 17) 구조체 배열을 초기화하고 출력 (1) | 2024.10.04 |