fflush
스트림을 플러시합니다.
구문
int fflush(
FILE *stream
);
매개 변수
stream
FILE
구조체에 대한 포인터입니다.
반환 값
버퍼가 성공적으로 플러시된 경우 fflush
는 0을 반환합니다. 지정된 스트림에 버퍼가 없거나 해당 스트림이 읽기 전용으로 열린 경우에도 값 0이 반환됩니다. EOF
의 반환 값은 오류를 나타냅니다.
참고 항목
fflush
가 EOF
를 반환한다면 쓰기 오류로 인해 데이터가 손실되었을 수 있습니다. 오류 처리기를 설정할 경우 setvbuf
함수를 사용하여 버퍼링을 끄거나 스트림 I/O 함수 대신 _open
, _close
, _write
등의 하위 수준 I/O 루틴을 사용하는 것이 가장 안전합니다.
설명
fflush
함수는 스트림 stream
을 플러시합니다. 스트림이 쓰기 모드로 열렸거나 업데이트 모드에서 열렸고 마지막 작업이 쓰기 fflush
인 경우 스트림 버퍼의 내용을 기본 파일 또는 디바이스에 쓰고 버퍼는 삭제됩니다. 스트림이 읽기 모드에서 열렸거나 스트림에 버퍼가 없는 경우 fflush
에 대한 호출이 영향을 미치지 않고 모든 버퍼가 유지됩니다. fflush
호출은 스트림에 대한 이전 ungetc
호출의 결과를 부정합니다. 스트림은 호출 후에 열려 있습니다.
stream
이 NULL
이면 해당 동작은 각 열린 스트림에 대한 fflush
호출과 같습니다. 쓰기 모드로 열린 모든 스트림과 마지막 작업이 쓰기인 업데이트 모드로 열린 모든 스트림이 플러시됩니다. 이 호출은 다른 스트림에 영향을 미치지 않습니다.
버퍼는 보통 운영 체제에서 유지 관리됩니다. 운영 체제에서는 버퍼가 가득 찼을 때, 스트림이 닫혀 있을 때, 스트림을 닫지 않고 프로그램이 정상적으로 종료될 때 등 디스크에 데이터를 자동으로 쓰는 최적의 시간을 결정합니다. 런타임 라이브러리의 디스크에 커밋 기능을 사용하면 중요한 데이터가 운영 체제 버퍼 대신 디스크에 직접 기록되어 있는지 확인할 수 있습니다. 기존 프로그램을 다시 작성하지 않고 프로그램의 개체 파일을 COMMODE.OBJ
.와 연결하여 이 기능을 사용하도록 설정할 수 있습니다. 결과 실행 파일에서 _flushall
을 호출하면 모든 버퍼의 내용이 디스크에 쓰여집니다. 만 _flushall
영향을 fflush
받습니다 COMMODE.OBJ
.
디스크에 커밋 기능을 제어하는 방법에 대한 자세한 내용은 Stream I/Ofopen
및 _fdopen
.
이 함수는 호출 스레드를 잠그므로 스레드로부터 안전합니다. 잠기지 않는 버전의 경우 _fflush_nolock
을 참조하세요.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
요구 사항
함수 | 필수 헤더 |
---|---|
fflush |
<stdio.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// crt_fflush.c
// Compile with: cl /W4 crt_fflush.c
// This sample gets a number from the user, then writes it to a file.
// It ensures the write isn't lost on crash by calling fflush.
#include <stdio.h>
int * crash_the_program = 0;
int main(void)
{
FILE * my_file;
errno_t err = fopen_s(&my_file, "myfile.txt", "w");
if (my_file && !err)
{
printf("Write a number: ");
int my_number = 0;
scanf_s("%d", &my_number);
fprintf(my_file, "User selected %d\n", my_number);
// Write data to a file immediately instead of buffering.
fflush(my_file);
if (my_number == 5)
{
// Without using fflush, no data was written to the file
// prior to the crash, so the data is lost.
*crash_the_program = 5;
}
// Normally, fflush is not needed as closing the file will write the buffer.
// Note that files are automatically closed and flushed during normal termination.
fclose(my_file);
}
return 0;
}
5
User selected 5