fclose 함수는 C 언어에서 파일 스트림을 닫을 때 사용됩니다. 파일 작업이 끝난 후 fclose를 호출하여 파일 리소스를 해제하고 데이터 손실을 방지하는 것은 매우 중요합니다.
1. fclose 함수 기본 문법
#include <stdio.h>
int fclose(FILE *stream);
매개변수 설명:
- stream: 닫을 파일의 파일 포인터입니다.
반환 값:
- 0: 파일이 정상적으로 닫힌 경우
- EOF: 파일 닫기 중 오류가 발생한 경우
2. fclose 사용 목적
- 파일 스트림을 닫아 시스템 리소스를 해제합니다.
- 버퍼에 남아 있는 데이터를 디스크에 기록합니다.
- 데이터 손실 및 메모리 누수를 방지합니다.
3. 기본 사용 예제
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (!file) {
perror("파일 열기 실패");
return 1;
}
fprintf(file, "fclose 사용법 예제입니다.\\n");
if (fclose(file) == 0) {
printf("파일이 성공적으로 닫혔습니다.\\n");
} else {
perror("파일 닫기 실패");
}
return 0;
}
출력 결과:
파일이 성공적으로 닫혔습니다.
4. 실전 활용 예제
4.1. 파일 읽기 및 닫기
#include <stdio.h>
int main() {
FILE *file = fopen("sample.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
char ch;
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
if (fclose(file) != 0) {
perror("파일 닫기 실패");
}
return 0;
}
출력 결과:
(파일의 내용)
4.2. 다중 파일 처리
#include <stdio.h>
int main() {
FILE *file1 = fopen("file1.txt", "w");
FILE *file2 = fopen("file2.txt", "w");
if (!file1 || !file2) {
perror("파일 열기 실패");
return 1;
}
fprintf(file1, "첫 번째 파일입니다.\\n");
fprintf(file2, "두 번째 파일입니다.\\n");
fclose(file1);
fclose(file2);
printf("모든 파일이 성공적으로 닫혔습니다.\\n");
return 0;
}
출력 결과:
모든 파일이 성공적으로 닫혔습니다.
5. fclose 사용 시 주의할 점
- 파일 포인터 유효성 확인: fclose 호출 전에 파일 포인터가 NULL인지 확인해야 합니다.
- 반환 값 확인: fclose가 EOF를 반환하면 파일 닫기 중 오류가 발생했음을 의미하므로 적절한 오류 처리가 필요합니다.
- 중복 닫기 금지: 이미 닫힌 파일을 다시 닫으면 정의되지 않은 동작이 발생할 수 있습니다.
6. 오류 처리 예제
#include <stdio.h>
int main() {
FILE *file = fopen("output.txt", "w");
if (!file) {
perror("파일 열기 실패");
return 1;
}
fprintf(file, "오류 처리 테스트입니다.\\n");
if (fclose(file) != 0) {
perror("파일 닫기 실패");
return 1;
}
printf("파일이 정상적으로 닫혔습니다.\\n");
return 0;
}
출력 결과:
파일이 정상적으로 닫혔습니다.
7. 결론
fclose 함수는 파일 작업 후 시스템 리소스를 해제하고 데이터 무결성을 보장하는 데 필수적인 역할을 합니다. 모든 파일 작업이 끝난 후 반드시 fclose를 호출하여 파일 스트림을 닫는 습관을 들이세요. 반환 값을 통해 오류 여부를 확인하고 적절한 처리를 통해 안정적인 파일 입출력 프로그램을 작성할 수 있습니다.
'Standard C' 카테고리의 다른 글
C 언어 feof 사용법 완벽 가이드 (0) | 2025.02.22 |
---|---|
C 언어 fopen 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 clearerr 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 BUFSIZ 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 sprintf 사용법 완벽 가이드 (0) | 2025.02.22 |