C 언어의 <stdio.h> 라이브러리는 표준 입출력 기능을 제공하는 함수들을 포함하고 있습니다. 이 라이브러리를 사용하면 콘솔과 파일 간의 데이터 입출력을 손쉽게 처리할 수 있습니다.
다른 입출력 라이브러리보기
1. fclose() 함수의 정의
fclose() 함수는 열린 파일 스트림을 닫고, 해당 스트림에 대한 모든 버퍼를 플러시(쓰기)한 후 메모리에서 해제합니다. 이 함수는 파일 작업이 끝난 후 반드시 호출해야 하며, 이를 통해 데이터 손실을 방지하고 시스템 자원을 효율적으로 관리할 수 있습니다.
형식
int fclose(FILE *stream);
stream: 닫을 파일의 포인터입니다. 이 포인터는 fopen()이나 freopen() 함수 호출을 통해 얻은 값입니다.
2. 주요 기능
파일 닫기: 열린 파일 스트림을 닫습니다.
버퍼 플러시: 파일에 남아 있는 데이터를 디스크에 기록합니다. 이는 파일이 쓰기 모드로 열렸을 때 중요합니다.
메모리 리소스 해제: 파일 스트림과 관련된 메모리 리소스를 해제합니다.
오류 상태 확인: 파일이 정상적으로 닫혔는지 확인할 수 있습니다.
3. 사용 예제
3.1 기본 사용법
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w"); // 파일을 쓰기 모드로 열기
if (file == NULL) {
perror("Error opening file");
return 1;
}
fprintf(file, "Hello, World!\n"); // 파일에 데이터 쓰기
fclose(file); // 파일 닫기
return 0;
}
위 예제에서 fclose()는 example.txt 파일을 닫고 데이터가 저장되도록 합니다.
3.2 오류 처리
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fprintf(file, "Hello, World!\n");
if (fclose(file) != 0) { // 파일 닫기 시 오류 처리
perror("Error closing file");
return 1;
}
return 0;
}
파일을 닫을 때 오류가 발생할 수 있으므로, fclose()의 반환 값을 확인하는 것이 중요합니다. fclose()가 성공하면 0을 반환하고, 실패하면 파일 오류가 반환됩니다.
4. 성능 고려사항
4.1 버퍼 플러시
fclose()는 파일에 남아 있는 데이터를 디스크에 기록합니다. 이는 파일이 쓰기 모드로 열렸을 때 중요합니다. 따라서, 파일을 닫기 전에 모든 데이터를 플러시하는 것이 좋습니다. 이 작업은 일반적으로 자동으로 이루어지지만, 수동으로 fflush()를 호출하여 파일 스트림의 버퍼를 직접 플러시할 수도 있습니다.
플러시* : 메모리 버퍼에 있는 데이터를 실제 저장 장치(예: 디스크)에 기록하는 과정
#include <stdio.h>
int main() {
FILE *file = fopen("output.txt", "w");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fprintf(file, "Writing some data...\n");
fflush(file); // 버퍼를 플러시
fclose(file); // 파일 닫기
return 0;
}
4.2 파일 핸들 관리
여러 파일을 동시에 열 때는 각 파일에 대한 포인터를 잘 관리해야 합니다. fclose()를 호출하여 파일을 닫지 않으면 메모리 누수가 발생할 수 있습니다. 파일 포인터를 배열에 저장하여 관리하는 방법도 있습니다.
#include <stdio.h>
#define MAX_FILES 10
int main() {
FILE *files[MAX_FILES];
for (int i = 0; i < MAX_FILES; i++) {
char filename[20];
sprintf(filename, "file%d.txt", i);
files[i] = fopen(filename, "w");
if (files[i] == NULL) {
perror("Error opening file");
return 1;
}
fprintf(files[i], "This is file number %d\n", i);
}
for (int i = 0; i < MAX_FILES; i++) {
fclose(files[i]); // 모든 파일 닫기
}
return 0;
}
'c언어 > C언어 개념정리' 카테고리의 다른 글
C언어의 표준 입출력 라이브러리 <studio.h> 3. fopen() (0) | 2024.12.03 |
---|---|
C언어의 표준 입출력 라이브러리 <studio.h> 2. scanf() (4) | 2024.12.02 |
C언어의 표준 입출력 라이브러리 <studio.h> 1. printf() (1) | 2024.12.02 |
C 언어에서 프로시저란? (0) | 2024.12.02 |
C언어에서의 라이브러리란? (0) | 2024.12.02 |