FlushFileBuffers 함수(fileapi.h)

지정된 파일의 버퍼를 플러시하고 버퍼링된 모든 데이터를 파일에 쓰게 합니다.

구문

BOOL FlushFileBuffers(
  [in] HANDLE hFile
);

매개 변수

[in] hFile

열려 있는 파일에 대한 핸들입니다.

파일 핸들에는 GENERIC_WRITE 액세스 권한이 있어야 합니다. 자세한 내용은 파일 보안 및 액세스 권한을 참조하세요.

hFile이 통신 디바이스에 대한 핸들인 경우 함수는 전송 버퍼만 플러시합니다.

hFile이 명명된 파이프의 서버 끝에 대한 핸들인 경우 클라이언트가 파이프에서 버퍼링된 모든 데이터를 읽을 때까지 함수가 반환되지 않습니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

hFile이 콘솔 출력에 대한 핸들이면 함수가 실패합니다. 콘솔 출력이 버퍼링되지 않기 때문입니다. 함수는 FALSE를 반환하고 GetLastError는ERROR_INVALID_HANDLE 반환합니다.

설명

일반적으로 WriteFileWriteFileEx 함수는 운영 체제가 정기적으로 디스크 또는 통신 파이프에 쓰는 내부 버퍼에 데이터를 씁니다. FlushFileBuffers 함수는 지정된 파일에 대한 버퍼링된 모든 정보를 디바이스 또는 파이프에 씁니다.

시스템 내의 디스크 캐싱 상호 작용으로 인해 많은 쓰기가 별도로 수행될 때 디스크 드라이브 디바이스에 쓸 때마다 FlushFileBuffers 함수가 비효율적일 수 있습니다. 애플리케이션이 디스크에 여러 쓰기를 수행하고 중요한 데이터가 영구 미디어에 기록되도록 해야 하는 경우 애플리케이션은 FlushFileBuffers를 자주 호출하는 대신 버퍼되지 않은 I/O를 사용해야 합니다. 버퍼되지 않은 I/O에 대한 파일을 열려면 FILE_FLAG_NO_BUFFERINGFILE_FLAG_WRITE_THROUGH 플래그를 사용하여 CreateFile 함수를 호출합니다. 이렇게 하면 파일 내용이 캐시되지 않고 각 쓰기를 통해 메타데이터를 디스크로 플러시합니다. 자세한 내용은 CreateFile을 참조하세요.

볼륨의 열려 있는 모든 파일을 플러시하려면 볼륨에 대한 핸들을 사용하여 FlushFileBuffers 를 호출합니다. 호출자에게는 관리자 권한이 있어야 합니다. 자세한 내용은 특별 권한으로 실행을 참조하세요.

CreateFile을 사용하여 볼륨을 열 때 lpFileName 문자열은 \.\x: 또는 \?\Volume{GUID} 형식이어야 합니다. 드라이브의 루트 디렉터리를 나타내므로 볼륨 이름에 후행 백슬래시를 사용하지 마세요.

Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술을 통해 지원됩니다.

기술 지원됨
SMB(서버 메시지 블록) 3.0 프로토콜 Yes
SMB 3.0 TFO(투명 장애 조치(failover)) Yes
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 Yes
CsvFS(클러스터 공유 볼륨 파일 시스템) Yes
ReFS(Resilient File System)
 

예제

예제는 다중 스레드 파이프 서버를 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 fileapi.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CreateFile

파일 관리 함수

WriteFile

WriteFileEx