Standard C
C 언어 fflush 사용법 완벽 가이드
레퍼러
2025. 2. 22. 13:42
fflush 함수는 C 언어에서 출력 버퍼를 비우거나, 출력 스트림의 데이터를 파일이나 출력 장치로 즉시 전달할 때 사용됩니다. 주로 표준 출력(stdout) 버퍼를 강제로 비워 출력 지연 문제를 방지하는 데 유용합니다.
1. fflush 함수 기본 문법
#include <stdio.h>
int fflush(FILE *stream);
매개변수 설명:
- stream: 버퍼를 비울 파일 포인터입니다. 표준 출력 버퍼를 비우려면 stdout을 사용합니다.
반환 값:
- 성공 시 0 반환
- 실패 시 EOF 반환
2. fflush 사용 목적
- 출력 버퍼의 내용을 강제로 출력
- 파일 스트림의 버퍼를 디스크에 기록
- 프로그램 충돌 시 데이터 손실 방지
3. 기본 사용 예제
#include <stdio.h>
int main() {
printf("첫 번째 줄 출력 (버퍼에 저장됨)\\n");
fflush(stdout); // 출력 버퍼 비우기
printf("두 번째 줄 출력\\n");
return 0;
}
출력 결과:
첫 번째 줄 출력 (버퍼에 저장됨)
두 번째 줄 출력
4. 실전 활용 예제
4.1. 사용자 입력 대기 시 출력 보장
#include <stdio.h>
int main() {
printf("이름을 입력하세요: ");
fflush(stdout); // 입력 전 출력 보장
char name[50];
scanf("%s", name);
printf("안녕하세요, %s님!\\n", name);
return 0;
}
출력 결과:
이름을 입력하세요: (사용자 입력)
안녕하세요, (사용자 입력)님!
4.2. 파일 스트림 버퍼 비우기
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (!file) {
perror("파일 열기 실패");
return 1;
}
fprintf(file, "파일에 저장할 데이터\\n");
fflush(file); // 디스크에 데이터 강제 기록
fclose(file);
printf("파일 쓰기와 버퍼 비우기가 완료되었습니다.\\n");
return 0;
}
출력 결과:
파일 쓰기와 버퍼 비우기가 완료되었습니다.
5. fflush 사용 시 주의할 점
- 입력 스트림 사용 제한: stdin에 대해 fflush를 사용하는 것은 표준 C에서 정의되지 않으며, 일부 구현에서는 예상치 못한 동작을 유발할 수 있습니다.
- 반환 값 확인: fflush가 EOF를 반환하면 오류가 발생한 것이므로 적절히 처리해야 합니다.
- 버퍼링 전략 이해: 파일 스트림은 버퍼링될 수 있으므로, 파일이 닫히기 전에 fflush를 호출하여 데이터 손실을 방지할 수 있습니다.
6. 오류 처리 예제
#include <stdio.h>
int main() {
FILE *file = fopen("readonly.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
if (fflush(file) == EOF) {
perror("버퍼 비우기 실패");
}
fclose(file);
return 0;
}
출력 결과:
버퍼 비우기 실패: Invalid argument
7. 결론
fflush 함수는 출력 버퍼의 데이터를 강제로 출력하거나 파일 스트림의 버퍼를 디스크에 기록하는 데 필수적입니다. 특히 사용자 입력 대기 전 출력 보장, 프로그램 중간 상태 저장, 예기치 않은 종료 대비 등의 시나리오에서 유용하게 사용됩니다. fflush를 적절히 사용하여 더 안정적이고 예측 가능한 프로그램을 작성해 보세요.