Newsgroup: it.comp.lang.c
Titolo: File di log & crash

all'interno di un mio programma chiamo una funzione che scrive dei dati
su un file di log ed esegue un fflush subito dopo la scrittura del file.
In caso di crash (prima di fclose) quel fflush che e` stato eseguito
garantisce l'integrita` del file di log?
Se cosi` non fosse, quale sarebbe l'alternativa?
ciao
Kronos
-- 
Home: 
http://kronoz.tsx.org
Non sempre quello che viene dopo e' progresso.
Alessandro Manzoni

Se cosi` non fosse, quale sarebbe l'alternativa?
Credo nessuna se cerchi la portabilita': queste garanzie dipendono
dal sistema operativo e dall'hardware in uso (e se i dischi
avessero una write cache con riordinamento per ottimizzazione
delle scritture ?).
Sotto Win32 leggendo l'help di fflush di VC++ 6.0 ho visto che
esiste la possibilita' di fare il flush "su disco" invece che
sui buffer facendo il link del programma con uno speciale
file .obj (cosa significhi "su disco" pero' non e' chiarito:
funziona anche con dischi di rete ? con dischi con cache di
scrittura ?)
Sotto Linux e' disponibile la chiamata "sync" la cui pagina
di man pero' recita:
 BUGS
   According to  the  standard  specification  (e.g.,  SVID),
   sync()  schedules  the  writes,  but may return before the
   actual writing is done.   However,  since  version  1.3.20
   Linux  does actually wait.  (This still does not guarantee
   data integrity: modern disks have large caches.)
Immaginando un disco condiviso tramite Samba da una macchina
Linux ad una macchina Win32 non capisco come faccia VC++ 6.0
a garantire la scrittura "su disco" quando questa garanzia
non e' disponibile nemmeno sulla macchina Linux che il disco
lo gestisce fisicamente...
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 log?
  Probabilmente si`: fflush() assicura lo svuotamento del buffer
associato al file, qualsiasi cosa cio` significhi. Considera, pero`, che
ci sono sistemi operativi che bufferizzano a loro volta, anche a piu`
livelli. Dato, tuttavia, che questo tipo di scrittura differita di
solito fa parte di sistemi di preservazione dell'integrita` dei dati,
non dovrebbero presentarti eccessivi problemi.
	Alla prossima,
		Marco

fiducioso in caso di blackout.
Secondo me non e' affatto assicurato in quest'ultimo caso.
Poi bisogna vedere che si intende per "crash", se quello del
programma, o quello del sistema.
--
Andrea Laforgia (ICQ 87230455)
------------------------------ 
#exclude <windows.h>

 programma, o quello del sistema.
quello del programma
per adesso non sono ancora riuscito a scrivere un programma che in caso
di crash trascini con se` linux ;)
ciao
Kronos
-- 
Home: 
http://kronoz.tsx.org
Mi piace avere amici rispettabili;
Mi piace essere il peggiore della compagnia.

 di man pero' recita:
[cut]
beh, visto che il sistema (linux) sopravvivera` al crash
dell'applicazione, non penso che questo potrebbe creare problemi
stavo anche valutanto di affidare la scrittura al demone syslog, tu cosa
ne pensi?
ciao
Kronos
-- 
Home: 
http://kronoz.tsx.org
La vasca da bagno fu inventata nel 1850, il telefono nel 1875.
Se fossi vissuto nel 1850, avrei potuto restare in vasca per 25 anni
senza sentir squillare il telefono

programma, o quello del sistema.
Con crash intendevo appunto quello del programma: se un
programma C chiama fflush e poi si blocca i dati dovrebbero
essere comunque scritti prima o poi su disco da parte del
sistema operativo.
Con Win9x si tendono a confondere i crash applicativi con
i crash di sistema... a mio parere perche' - by design -
non esiste un confine netto del sistema operativo...


ne pensi?
Mai usato... comunque di queste cose credo che ne sappiano di piu' in
un newsgroup dedicato a linux.
