다음을 통해 공유


fflush

스트림을 플러시합니다.

구문

int fflush(
   FILE *stream
);

매개 변수

stream
FILE 구조체에 대한 포인터입니다.

반환 값

버퍼가 성공적으로 플러시된 경우 fflush는 0을 반환합니다. 지정된 스트림에 버퍼가 없거나 해당 스트림이 읽기 전용으로 열린 경우에도 값 0이 반환됩니다. EOF의 반환 값은 오류를 나타냅니다.

참고 항목

fflushEOF를 반환한다면 쓰기 오류로 인해 데이터가 손실되었을 수 있습니다. 오류 처리기를 설정할 경우 setvbuf 함수를 사용하여 버퍼링을 끄거나 스트림 I/O 함수 대신 _open, _close, _write 등의 하위 수준 I/O 루틴을 사용하는 것이 가장 안전합니다.

설명

fflush 함수는 스트림 stream을 플러시합니다. 스트림이 쓰기 모드로 열렸거나 업데이트 모드에서 열렸고 마지막 작업이 쓰기 fflush 인 경우 스트림 버퍼의 내용을 기본 파일 또는 디바이스에 쓰고 버퍼는 삭제됩니다. 스트림이 읽기 모드에서 열렸거나 스트림에 버퍼가 없는 경우 fflush에 대한 호출이 영향을 미치지 않고 모든 버퍼가 유지됩니다. fflush 호출은 스트림에 대한 이전 ungetc 호출의 결과를 부정합니다. 스트림은 호출 후에 열려 있습니다.

streamNULL이면 해당 동작은 각 열린 스트림에 대한 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

참고 항목

스트림 I/O
fclose, _fcloseall
_flushall
setvbuf