¿Cuándo es necesario hacer en un archivo?
Nunca lo hago porque llamo a File.Close, y creo que se vacía automáticamente, ¿no es así?¿Cuándo vaciar un archivo en Go?
Respuesta
Notarás que un archivo os.File no tiene un .Flush() porque no lo necesita porque no está almacenado. Las escrituras son syscalls directas para escribir en el archivo.
Cuando su programa se cierra (incluso si falla) todos los archivos que tiene abiertos serán cerrados automáticamente por el sistema operativo y el sistema de archivos escribirá sus cambios en el disco cuando lo necesite (a veces hasta unos minutos después) tu programa sale).
Llamar a os.File.Sync() llamará al fysync() syscall que forzará al sistema de archivos a vaciar sus búferes en el disco. Esto garantizará que sus datos estén en el disco y sean constantes incluso si el sistema se apaga o el sistema operativo falla.
No es necesario llamar .sync()
Esta respuesta confunde 'fsync' con' fflush'. No necesita _flush_ un archivo sin búfer. Eso no significa que no necesite _sync_ si desea una garantía de que la escritura se confirmó en el disco. La respuesta de Piotr Praszmo es mejor. –
Cuando desee garantizar la integridad de los datos tanto como sea posible. Por ejemplo, ¿qué sucede si su programa se bloquea antes de cerrar el archivo?
Ver here. File.Sync()
es syscall al fsync. Deberías poder encontrar más bajo ese nombre.
Tenga en cuenta que fsync
no es lo mismo que fflush y no se ejecuta antes de cerrar.
Por lo general, no es necesario que lo llame. El archivo se escribirá en el disco de todos modos, después de un tiempo y si no hay un corte de energía durante este período.
"Generalmente, no es necesario que lo llame" Lo cual solo es cierto si no está trabajando en un dispositivo incorporado en el que alguien puede decidir desconectar su fuente de alimentación en cualquier momento. – Joppe
El problema no está limitado solo a los dispositivos integrados. Siempre existe el riesgo de que las escrituras no sincronizadas mueran junto con el búfer en memoria de un sistema de archivos, pero con los modernos sistemas de archivos registrados por diario, esa ventana es infinitamente pequeña. Algunos hardware con respaldo de batería pueden mejorar la consistencia aún más. 'sync' es la manera de hacer que el programa sea más consciente de que el almacenamiento subyacente está actualizado. –
Parece la mayoría de las recomendaciones aquí son para no llamar a fsync(), pero en general depende principalmente de su requisito de aplicación. Si está trabajando en lectura/escritura crítica de archivos, siempre se recomienda llamar a fsync().
http://www.microhowto.info/howto/atomically_rewrite_the_content_of_a_file.html#idp31936
enlace, tiene más detalles sobre cuando file.Sync() le ayudará.
- 1. cómo vaciar un archivo usando Python
- 2. Vaciar un archivo mientras está en uso en Linux
- 3. ¿Cómo vaciar de forma asíncrona un archivo mapeado en memoria?
- 4. Cómo vaciar un TFileStream?
- 5. ¿Cómo puedo vaciar de manera eficiente un archivo Perl DBM?
- 6. ¿Cuándo genera Jython en un archivo .py un archivo .class?
- 7. En SQL Server, ¿cuándo debería usar GO y cuándo debería usar punto y coma?
- 8. Cómo vaciar correctamente un NSMutableArray
- 9. ¿Cómo vaciar un socket en python?
- 10. Cómo borrar/vaciar el cartón en la vista Vaciar 0isarpear
- 11. ¿Cómo puedo descargar eficientemente un archivo grande usando Go?
- 12. Cómo vaciar el contenido de un div
- 13. ¿Cuándo no cerrar un archivo php?
- 14. Dirección de un temporal en Go?
- 15. ¿Hay un bucle foreach en Go?
- 16. Vaciar un grupo de elementos MSBuild
- 17. ¿Hay un analizador de Go?
- 18. Vaciar a ListView
- 19. Fusionar mapas en Go
- 20. Biblioteca compartida en Go?
- 21. compilación condicional en Go
- 22. ¿Cómo vaciar ("truncar") un archivo en Linux que ya existe y está protegido de alguna manera?
- 23. Go, go get, go install, paquetes locales y control de versión
- 24. Computación en clúster en Go
- 25. ¿Cuándo puedo eliminar un archivo después de usarlo en Response.WriteFile()?
- 26. ¿Cuándo se realizó la extracción de un archivo en TFS?
- 27. ¿Cómo vaciar/destruir una sesión en rieles?
- 28. Cómo vaciar/vaciar Windows ¿LEER el caché de disco en C#?
- 29. ¿Cuándo debo usar los bloques Begin/End y la palabra clave Go en SQL Server?
- 30. ¿Cómo se puede vaciar una escritura usando un descriptor de archivo?
¿Por qué alguien quiere cerrar esto? Un comentario por favor? –
¿Qué te hace pensar que .Close() vacía automáticamente los bytes al almacenamiento? [La fuente de Close no parece indicar esto] (https://golang.org/src/os/file_unix.go?s=5591:5619#L179) - ¿Me falta algo? –