2016-06-17 48 views
6

fwrite() to wywołanie biblioteki, które najpierw buforuje dane w buforze przestrzeni użytkownika, a następnie wywołuje wywołanie systemowe write(), aby faktycznie wykonać operacje zapisu.Czy dane w buforze fwrite() zostaną przepłukane, gdy program istnieje nieprawidłowo?

Jeśli program wywołuje fwrite() napisać niektóre dane do pliku, ale wtedy istnieje nieprawidłowo, będzie bufor fwrite() być wyczyszczone zaczerwieniona lub buforowane dane zostaną pozostały w pamięci?

System operacyjny, który rozważam, to Linux.

+0

Myślę, że to może zależeć od systemu operacyjnego. – MikeCAT

+0

@MikeCATI zaktualizowało to pytanie, i powiedzmy, że system operacyjny to Linux –

+0

prawdopodobnie jest niezdefiniowany, ponieważ może specyfikacja nie mówi. może "fflush" można bezpiecznie wywołać w obsłudze sygnału, może nie. –

Odpowiedz

8

Jeśli program został nieprawidłowo zakończony, żadne buforowane dane nie zostaną przepłukane. System operacyjny po prostu mówi "o mój drogi, zostawiłeś otwarty deskryptor pliku, lepiej zamknij to dla ciebie", gdy proces się zakończy; nie ma pojęcia, że ​​jakieś przypadkowe dane leżą gdzieś w pamięci, które program zamierzał zapisać na dysku, ale nie.

+0

Pytanie dotyczy szczególnie anormalnego zakończenia. Pierwszy akapit Twojej odpowiedzi wydaje się zbędny. – Barmar

+0

@Barmar masz rację, to po prostu mieć większy obraz. Edytowane, dziękuję – mik1904

+0

Czy w Linuksie określono, że dane z pewnością nie są przepłukane? Spodziewam się, że na anormalnym stanie wyjścia, bufor _might_ lub _might not_ zostanie przepłukany, prawdopodobnie częściowo przepłukany. Oczywiście nienormalny stan może pochodzić w połowie pisania. – chux