728x90
반응형
C 언어에서 파일 입출력은 표준 라이브러리 <stdio.h>
를 통해 수행됩니다. 오늘은 파일을 열고 닫는 fopen
, fclose
함수와, 파일에서 데이터를 읽고 쓰는 fread
, fwrite
함수에 대해 살펴보겠습니다.
1. fopen: 파일 열기
fopen
함수는 파일을 열고, 해당 파일과 연관된 FILE
포인터를 반환합니다. 기본적인 사용법은 다음과 같습니다.
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "w");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
printf("파일 열기 성공!\n");
fclose(fp);
return 0;
}
fopen의 모드
fopen
함수의 두 번째 인수로 파일을 여는 모드를 지정할 수 있습니다.
모드 | 설명 |
---|---|
"r" | 읽기 모드 (파일이 존재해야 함) |
"w" | 쓰기 모드 (파일이 존재하면 초기화됨) |
"a" | 추가 모드 (파일 끝에 데이터 추가) |
"r+" | 읽기/쓰기 모드 (파일이 존재해야 함) |
"w+" | 읽기/쓰기 모드 (파일이 존재하면 초기화됨) |
"a+" | 읽기/쓰기 모드 (파일 끝에 데이터 추가) |
2. fclose: 파일 닫기
파일을 다 사용한 후에는 반드시 fclose
함수를 호출하여 파일을 닫아야 합니다. 그렇지 않으면 데이터 손실이나 메모리 누수가 발생할 수 있습니다.
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "w");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
fclose(fp);
printf("파일 닫기 완료!\n");
return 0;
}
3. fwrite: 파일에 데이터 쓰기
fwrite
함수는 바이너리 데이터를 파일에 씁니다.
#include <stdio.h>
int main() {
FILE *fp = fopen("data.bin", "wb");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
int numbers[] = {1, 2, 3, 4, 5};
size_t written = fwrite(numbers, sizeof(int), 5, fp);
if (written != 5) {
perror("파일 쓰기 실패");
} else {
printf("파일 쓰기 성공!\n");
}
fclose(fp);
return 0;
}
fwrite의 인수
- 첫 번째 인수: 쓰려는 데이터의 포인터
- 두 번째 인수: 각 데이터 요소의 크기 (바이트 단위)
- 세 번째 인수: 쓰려는 데이터 요소의 개수
- 네 번째 인수: 파일 포인터
4. fread: 파일에서 데이터 읽기
fread
함수는 바이너리 데이터를 파일에서 읽습니다.
#include <stdio.h>
int main() {
FILE *fp = fopen("data.bin", "rb");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
int numbers[5] = {0};
size_t read = fread(numbers, sizeof(int), 5, fp);
if (read != 5) {
perror("파일 읽기 실패");
} else {
printf("파일 읽기 성공! 읽은 값들: ");
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
}
fclose(fp);
return 0;
}
fread의 인수
- 첫 번째 인수: 데이터를 저장할 메모리의 포인터
- 두 번째 인수: 각 데이터 요소의 크기
- 세 번째 인수: 읽을 데이터 요소의 개수
- 네 번째 인수: 파일 포인터
5. 종합 예제: 파일 저장 및 불러오기
아래 예제는 fwrite
로 데이터를 저장한 후, fread
로 다시 불러오는 과정입니다.
#include <stdio.h>
int main() {
FILE *fp;
int data[] = {10, 20, 30, 40, 50};
int buffer[5];
// 파일 쓰기
fp = fopen("example.bin", "wb");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
fwrite(data, sizeof(int), 5, fp);
fclose(fp);
// 파일 읽기
fp = fopen("example.bin", "rb");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
fread(buffer, sizeof(int), 5, fp);
fclose(fp);
printf("파일에서 읽은 데이터: ");
for (int i = 0; i < 5; i++) {
printf("%d ", buffer[i]);
}
printf("\n");
return 0;
}
마무리
오늘은 C 언어에서 파일을 다루는 fopen
, fclose
, fread
, fwrite
함수에 대해 살펴보았습니다. 파일을 올바르게 열고 닫는 것이 중요하며, fread
와 fwrite
를 사용하여 데이터를 효율적으로 입출력할 수 있습니다. 실전 프로젝트에서 파일 입출력이 필요한 경우, 이러한 함수들을 활용하여 안정적인 프로그램을 개발해 보세요!
반응형
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C 언어 파일 포인터와 위치 조정 - fseek, ftell, rewind (0) | 2025.02.07 |
---|---|
C언어 표준 입출력 (stdio.h) - fprintf와 fscanf 사용법 (0) | 2025.02.06 |
C 언어 표준 입출력 - `fputs`와 `fgets` 사용법 (0) | 2025.02.04 |
C 표준 입출력 - `puts`와 `gets` (0) | 2025.02.03 |
stdio.h 개요 및 기본 입출력 함수 `printf`, `scanf` (0) | 2025.02.02 |