Czy bufor zostanie automatycznie opróżniony na dysk po zakończeniu procesu?
Ogólnie odpowiedź brzmi „ nie” .
To zależy od polecenia. Jak wspomniano w innych odpowiedziach, jeśli polecenie nie buforuje danych wewnętrznie, wszystkie dane będą dostępne po zakończeniu polecenia.
Ale większość, jeśli nie wszystkie, standardowe biblioteki we / wy domyślnie wykonują buforowanie standardowe (do pewnego stopnia) i dają różne gwarancje dotyczące automatycznego opróżniania buforów po zamknięciu aplikacji.
C gwarantuje, że normalne wyjście opróżni bufory . „Normalne wyjście” oznacza, że exit
jest wywoływane - albo jawnie, albo przez powrót z main
. Jednak nienormalne wyjście może obejść to wezwanie (a zatem pozostawić niewyłączone bufory).
Oto prosty przykład:
#include <signal.h>
#include <stdio.h>
int main() {
printf("test");
raise(SIGABRT);
}
Jeśli to skompilować i uruchomić go, test
będzie nie muszą być zapisywane na standardowe wyjście.
Inne języki programowania dają nawet mniej gwarancje: Java, na przykład, czy nie auto-flush Po wygaśnięciu programu . Jeśli bufor wyjściowy zawiera niezakończoną linię, może zostać utracony, chyba że zostanie System.out.flush()
jawnie wywołany.
To powiedziawszy, twoje pytanie pyta o coś nieco innego: jeśli dane w ogóle dotrą do pliku , powinno to zrobić natychmiast po zakończeniu polecenia (z zastrzeżeniem zastrzeżeń opisanych w innych odpowiedziach).