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