프로세스가 종료되면 버퍼가 자동으로 디스크로 플러시됩니까?
일반적으로 대답은 ' 아니요' 입니다.
명령에 따라 다릅니다. 다른 답변 언급으로, 경우 명령이 내부적으로 데이터를 버퍼링하지 않는, 모든 데이터는 때 명령 종료 사용할 수 있습니다.
그러나 전부는 아니더라도 대부분의 표준 I / O 라이브러리 는 기본적으로 어느 정도까지 버퍼 stdout을 수행 하며 응용 프로그램이 닫힐 때 버퍼의 자동 플러시에 대해 다른 보장을 제공합니다.
C는 정상적인 종료가 버퍼를 플러시 할 것을 보장합니다 . "정상 종료"는 exit
명시 적으로 또는에서 복귀하여 호출되는 것을 의미합니다 main
. 그러나 비정상적인 종료는이 호출을 피할 수 있으므로 플러시되지 않은 버퍼를 남겨 둡니다.
다음은 간단한 예입니다.
#include <signal.h>
#include <stdio.h>
int main() {
printf("test");
raise(SIGABRT);
}
이것을 컴파일하고 실행하면 반드시 stdout에 쓰여질 필요 test
는 없습니다 .
다른 프로그래밍 언어는 훨씬 적은 보증을 제공합니다. 예를 들어, Java 는 프로그램 종료시 자동 플러시 되지 않습니다 . 출력 버퍼에 종료되지 않은 행이 포함되어 있으면 System.out.flush()
명시 적으로 호출 되지 않는 한 손실 될 수 있습니다 .
즉, 질문 본문은 약간 다른 것을 요구합니다. 데이터가 파일 에 전혀 도착 하면 명령이 종료 된 직후에 수행해야합니다 (다른 답변에 설명 된주의 사항에 따라 다름 ).