usando archivos como IPC en linux

Tengo un escritor que crea y, a veces, actualiza un archivo con información de estado. Los lectores están implementados en lua (así que solo obtuve io.open) y posiblemente bash (cat, grep, lo que sea). Me preocupa lo que sucedería si se actualiza la información de estado (lo que significa una reescritura completa del archivo) mientras un lector tiene un identificador abierto para el archivo: ¿qué puede suceder? Yo tambien he leido que si la operación de escritura/lectura está por debajo de 4 KB, es atómica: eso estaría perfectamente bien para mí, ya que la información de estado puede encajar bien en esa dimensión. ¿Puedo hacer esta suposición?

preguntado el 24 de agosto de 12 a las 19:08

2 Respuestas

Una lectura o escritura es atómica por debajo de 4 Kbytes solo para canalizaciones, no para archivos de disco (para los cuales la granularidad atómica puede ser el tamaño de bloque del sistema de archivos, generalmente 512 bytes).

En la práctica, podría evitar preocuparse por tales problemas (suponiendo que su archivo de estado tenga, por ejemplo, menos de 512 bytes), y creo que si el escritor abre y escribe rápidamente ese archivo (en particular, si evita abierto (2)-ing un archivo y manteniendo el identificador del archivo abierto durante mucho tiempo -muchos segundos-, luego escribir (2)-ing más tarde -una vez, una pequeña cuerda- dentro de él), no necesita molestarse.

Si eres paranoico, pero asumes que los lectores son (como grep) al abrir un archivo y leerlo rápidamente, puede escribir en un archivo temporal y renombrar (2)-ing cuando está escrito (y cerrar (2)-ed) en su totalidad.

como pato sugiere, bloquear el archivo tanto en los lectores como en los escritores también es una solución.

contestado el 23 de mayo de 17 a las 13:05

considerando también esto en mover archivos cuando un controlador está abierto, creo que la solución mv es la mejor. - lorenzo pistón

Puedo estar equivocado, en cuyo caso alguien me corregirá, pero no creo que los lectores externos presten atención a si el archivo se actualiza simultáneamente. Van a imprimir (o posiblemente eof o error) lo que sea que esté allí.

En cualquier caso, ¿por qué no evitar todo el lío y simplemente usar bloqueos de archivos? Tener el escritor flock (o similar) y los lectores comprueban la cerradura. Si obtienen el bloqueo, saben que están bien para leer.

Respondido 24 ago 12, 20:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.