¿Cómo se determina mediante progtwigción si la llamada al sistema de “escritura” es atómica en un archivo en particular?

En algunos casos, el codificador no puede confiar en que las llamadas del sistema sean atómicas, por ejemplo, si el archivo está en un sistema de archivos NFS. (cf NFS Overview, FAQ y documentos HOWTO ). Pero las llamadas al sistema atómico son finalmente necesarias para la mayoría de los trabajos de bases de datos. (cf Atomicidad de los sistemas de bases de datos ).

¿Existe una forma estándar (y de sistema operativo independiente) de confirmar que las escrituras (y otras llamadas sistemáticas) son atómicas en un ARCHIVO particular en C (o python).

¿Alguna sugerencia?

Notas subsiguientes: la atomicidad en las tuberías se discute en lo siguiente:

  • unix pipe escritores múltiples
  • ¿Qué sucede si se llama a una llamada del sistema de escritura en el mismo archivo mediante 2 procesos diferentes simultáneamente?

Note en particular el extracto de la página “man” que trata específicamente con O_APPEND:

Si se establece el indicador O_APPEND de los indicadores de estado del archivo, el desplazamiento del archivo se establecerá al final del archivo antes de cada escritura y no se producirá ninguna operación de modificación del archivo entre el cambio del desplazamiento del archivo y la operación de escritura.

La llamada de write como se define en POSIX no tiene ninguna garantía de atomicidad. Entonces no necesitas confirmar nada, no es atómico.

Ni siquiera garantiza que los datos hayan llegado al disco duro (si hay un disco) si se completa con éxito. La lectura exitosa de los datos tampoco le da ninguna garantía.

Tendrá que usar la familia de funciones de sync para obtener algunas garantías de durabilidad.