Чи буде буфер автоматично змиватися на диск, коли процес закінчується?
Загалом відповідь - ні .
Це залежить від команди. Як і інші відповіді, згадується, що якщо команда не завантажує внутрішньо дані, всі дані будуть доступні, коли команда припиняється.
Але більшість, якщо не всі, стандартні бібліотеки вводу-виводу роблять буферні вибудовування за замовчуванням (певною мірою) і дають різні гарантії щодо автоматичного промивання буферів, коли програма закривається.
C гарантує, що нормальний вихід змиває буфери . "Нормальний вихід" означає, що exit
викликається - явно, або повертаючись з main
. Однак ненормальний вихід може обійти цей виклик (і тому залишити незамкнутими буфери позаду).
Ось простий приклад:
#include <signal.h>
#include <stdio.h>
int main() {
printf("test");
raise(SIGABRT);
}
При компіляції цього і виконати його, test
буде НЕ обов'язково бути записані на стандартний висновок.
Інші мови програмування дають ще менші гарантії: наприклад, Java не закінчується автоматичним змиванням після закінчення програми . Якщо вихідний буфер містить незавершений рядок, він може, таким чином, втрачатися, якщо тільки не System.out.flush()
було викликано явно.
Тим НЕ менше, ваше тіло питання питає що - то трохи інше: якщо дані надходять в файл на всіх , він повинен зробити це відразу ж після команди припиняється ( при умови застережень , описаних в інших відповідях).