Будет ли буфер автоматически сбрасываться на диск при выходе из процесса?
В общем, ответ - нет .
Это зависит от команды. Как уже упоминалось в других ответах, если команда не выполняет внутреннюю буферизацию данных, все данные будут доступны после ее завершения.
Но большинство, если не все, библиотеки стандарта ввода / вывод этого буфер стандартного вывода по умолчанию (в некоторой степень), и дают разные гарантии о автоматической промывке буферов , когда Замкнутых приложения.
C гарантирует, что нормальный выход очистит буферы . «Нормальный выход» означает, что exit
вызывается - либо явно, либо путем возврата из main
. Однако ненормальный выход может обойти этот вызов (и, следовательно, оставить неиспользованные буферы позади).
Вот простой пример:
#include <signal.h>
#include <stdio.h>
int main() {
printf("test");
raise(SIGABRT);
}
Если вы скомпилируете это и выполните его, test
это не обязательно будет записано в стандартный вывод.
Другие языки программирования дают еще меньше гарантий: Java, например, делает не автоматический флаш по окончанию программы . Если выходной буфер содержит неопределенную строку, он может быть потерян, если не System.out.flush()
был вызван явно.
Тем не менее, ваше тело вопроса спрашивает что - то немного другое: если данные поступают в файл на всех , он должен сделать это сразу же после команды прекращается ( при условии предостережений , описанных в других ответах).