Quando è necessario fare in un file?
Non lo faccio mai perché chiamo su File.Close, e penso che sia scaricato automaticamente, non è vero?Quando svuotare un file in Go?
risposta
Si noterà che un file OS non ha un file .Flush() perché non ne ha bisogno perché non è memorizzato nel buffer. Le scritture sono dirette alle syscalls per scrivere sul file.
Quando il programma termina (anche se si blocca) tutti i file che ha aperto verranno chiusi automaticamente dal sistema operativo e il file system scriverà le modifiche sul disco quando ci sarà intorno (a volte fino a pochi minuti dopo il tuo programma esce).
Chiamare os.File.Sync() chiamerà il syscall di fsync() che costringerà il file system a svuotare i suoi buffer sul disco. Ciò garantirà che i tuoi dati siano su disco e persistenti anche se il sistema viene spento o il sistema operativo si interrompe.
Non è necessario chiamare .sync()
Questa risposta confonde 'fsync' con' fflush'. Non è necessario _flush_ un file non bufferizzato. Ciò non significa che non è necessario _sync_ it se si vuole garantire che la scrittura sia stata commessa su disco. La risposta di Piotr Praszmo è migliore. –
Quando si desidera garantire l'integrità dei dati il più possibile. Ad esempio, cosa succede se il tuo programma si blocca prima di chiudere il file?
Vedere here. File.Sync()
è syscall a fsync. Dovresti riuscire a trovare altro sotto quel nome.
Ricordare che fsync
non corrisponde a fflush e non viene eseguito prima della chiusura.
Generalmente non è necessario chiamarlo. Il file verrà comunque scritto sul disco, dopo un po 'di tempo e se non ci sono interruzioni di corrente durante questo periodo.
"Generalmente non è necessario chiamarlo" Che è vero solo se non si sta lavorando su un dispositivo incorporato dove qualcuno può decidere di disconnettere l'alimentazione in qualsiasi momento. – Joppe
Il problema non è limitato ai soli dispositivi integrati. C'è sempre il rischio che le scritture non sincronizzate muoiano insieme al buffer in memoria di un filesystem, ma con i moderni filesystem registrati su giornale, quella finestra è estremamente piccola. Alcuni hardware con batteria tampone possono migliorare ulteriormente la coerenza. 'sync' è il modo per rendere il programma più consapevole del fatto che lo storage sottostante è aggiornato. –
sembra la maggior parte delle raccomandazioni qui sono di non chiamare fsync(), ma in generale dipende principalmente sulla vostra esigenza applicativa. Se stai lavorando su file critici di lettura/scrittura, è sempre consigliabile chiamare fsync().
http://www.microhowto.info/howto/atomically_rewrite_the_content_of_a_file.html#idp31936
collegamento, ha maggiori dettagli su quando file.Sync() sarà di aiuto.
- 1. Come svuotare Stdin dopo fmt.Scanf() in Go?
- 2. come svuotare un file utilizzando Python
- 3. Come svuotare in modo asincrono un file mappato in memoria?
- 4. aggiungere a un file in Go
- 5. forzare un programma per svuotare l'output standard quando viene reindirizzato
- 6. Scala svuotare un elenco
- 7. Come svuotare un TFileStream?
- 8. Ottieni file inode in Go
- 9. Come svuotare un datagridview?
- 10. Come svuotare un file di registro log4j FileAppender?
- 11. Come svuotare un socket in python?
- 12. inizializzare un RDD per svuotare
- 13. Come svuotare correttamente il file Node.js writeStream?
- 14. Go - Che cos'è veramente un file multipart.File?
- 15. Vuotare o "svuotare" un descrittore di file senza read()?
- 16. Come svuotare un elenco in Python?
- 17. Mappare una matrice in un file tramite Mmap in Go
- 18. Cosa sono i file .a in Go?
- 19. Come calcolare sha256 checksum file in Go
- 20. Come svuotare un database SQL?
- 21. RavenDB come svuotare?
- 22. Go - no buildable Vai file sorgente in
- 23. Come svuotare ("troncare") un file su linux che esiste già ed è protetto in qualche modo?
- 24. Come svuotare la cache di un iFrame?
- 25. Come svuotare la console in Objective-C
- 26. Go Code si comporta in modo diverso in go test vs go run
- 27. importazione pacchetti in go
- 28. strings.Split in Go
- 29. Come posso forzare il browser Web a ricaricare un file Flash appena distribuito senza svuotare la cache?
- 30. Inheritance in Go
Perché qualcuno voleva chiudere questo? Un commento per favore? –
Cosa ti fa pensare che .Close() scarica automaticamente i byte nello spazio di archiviazione? [La fonte per Chiudi non sembra indicare questo] (https://golang.org/src/os/file_unix.go?s=5591:5619#L179) - mi manca qualcosa? –