2016-06-17 102 views
6

fwrite() è una chiamata di libreria che innanzitutto memorizza i dati in un buffer di spazio utente e quindi chiama la chiamata di sistema write() in seguito per eseguire effettivamente le operazioni di scrittura.I dati nel buffer fwrite() verranno svuotati quando un programma esiste in modo anomalo?

Se un programma invoca fwrite() a scrivere alcuni dati in un file, ma poi esiste in modo anomalo, sarà il buffer di fwrite() essere azzerato arrossata, oppure i dati nel buffer vi resteranno nella memoria?

Il sistema operativo che sto considerando è Linux.

+0

Suppongo che dipenda dal sistema operativo. – MikeCAT

+0

@MikeCATI ha aggiornato la domanda, e diciamo che il sistema operativo è Linux –

+0

probabilmente è indefinito, perché forse la specifica non dice. forse 'fflush' è sicuro chiamare il gestore del segnale, forse no. –

risposta

8

Se il programma termina in modo anomalo, i dati memorizzati nel buffer non verranno scaricati. Il sistema operativo dice semplicemente "oh mio caro, hai lasciato un descrittore di file aperto, è meglio che lo chiudi per te" quando il processo termina; non ha idea che ci siano dati casuali che si trovano da qualche parte nella memoria che il programma ha inteso scrivere sul disco ma non lo ha fatto.

+0

La domanda riguarda specificamente la terminazione anomala. Il primo paragrafo della tua risposta sembra superfluo. – Barmar

+0

@Barmar hai ragione, era solo per avere un'immagine più grande. Modificato, grazie – mik1904

+0

È specificato in Linux che i dati non sono sicuramente svuotati? Mi aspetterei in una condizione di uscita anormale, il buffer _might_ o _might not_ essere svuotato, possibilmente anche parzialmente svuotato. Certamente la condizione anormale può originarsi nel mezzo della scrittura. – chux