He echado un vistazo a los documentos pero parece que no puedo encontrar la parte relevante. ¿Alguien puede decirme para qué sirve la llamada al sync
en el siguiente código?¿Qué hace "file.sync = true"?
fh = Tempfile.new('tmp')
fh.sync = true
He echado un vistazo a los documentos pero parece que no puedo encontrar la parte relevante. ¿Alguien puede decirme para qué sirve la llamada al sync
en el siguiente código?¿Qué hace "file.sync = true"?
fh = Tempfile.new('tmp')
fh.sync = true
Establece el modo de sincronización del archivo.
Esto afecta las operaciones futuras y hace que la salida se escriba sin búfer de bloque.
Si f.tty?
es verdadero, es decir, si el archivo está conectado a un dispositivo similar a una consola, la salida no se almacenará en búfer. Pero cuando la salida va a una tubería o archivo, f.tty?
será falso y la biblioteca de E/S cambiará a buffer buffering, es decir, acumulando salida en un buffer y escribiéndola solo si el archivo está cerrado, el programa sale, o el buffer se llena Esto es más rápido y el resultado final es el mismo.
Configuración f.sync = true
derrota este modificador. Esto puede ser útil si la salida de la tubería está conectada a algo que en realidad es una consola o de alguna manera interactiva o si el contenido del archivo está siendo monitoreado activamente.
Básicamente, escribe cualquier dato almacenado en memoria en el disco de inmediato.
Sonidos correctos. Me pregunto por qué no está en los documentos. http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html –
"Me pregunto por qué no está en los documentos". Porque es parte de IO? Prueba 'ri IO.sync'. –
Esta respuesta es algo engañosa. La operación que escribe los datos inmediatamente es 'fh.fsync'. El método '# sync' establece el modo de sincronización y afecta las operaciones futuras. Ahora bien, si se refería a operaciones de "causas * futuras * para escribir datos de inmediato", entonces, claro. – DigitalRoss
Tempfile hereda de IO. De IO.sync
documentos:
ios.sync -> true or false
------------------------------------------------------------------------------
Returns the current ``sync mode'' of ios. When sync mode is true, all
output is immediately flushed to the underlying operating system and is not
buffered by Ruby internally. See also IO#fsync.
f = File.new("testfile")
f.sync #=> false
+1, es importante mantener el almacenamiento en memoria intermedia tanto como sea posible. No hay nada como descubrir cuán útil es el buffering de la manera más difícil. –
La respuesta más informativa. Gracias. –