![Escritura atómica y aviso de archivos en modo O_APPEND en Linux](https://rvso.com/image/154444/Escritura%20at%C3%B3mica%20y%20aviso%20de%20archivos%20en%20modo%20O_APPEND%20en%20Linux.png)
Estoy lidiando con una situación en la que quiero guardar el estado de forma persistente para una aplicación que tiene muchos procesos y muchos subprocesos dentro de esos procesos. Normalmente, esto requeriría un uso intensivo del bloqueo para garantizar que no haya conflictos.
Deseo evitar esto guardando los datos en un archivo con el modo O_APPEND. De esta manera, siempre que me asegure de que los datos sean <4 KB, las escrituras en el archivo serán atómicas. Si utilizo estructuras de datos de solo agregar, entonces tengo una solución sin bloqueo.
Sin embargo, para que esto funcione necesito saber la ubicación de los datos dentro del archivo después de haber escrito en ese archivo. El problema con el que me encuentro es que no puedo encontrar una llamada al sistema que escriba en un archivo y luego me indique el desplazamiento dentro de ese archivo en el que se escribió.
Puedo utilizar una escritura seguida de una búsqueda para descubrir esta ubicación. Sin embargo, esto no es seguro si otro hilo comparte el mismo descriptor de archivo, por lo que requeriría que proteja la escritura con un mutex que va en contra de mis esfuerzos por evitar bloqueos.
Al examinar las páginas de manual para write, writev, pwrite y prwritev no se mostró nada que pudiera realizar una escritura y luego me indique el desplazamiento después de la escritura como una única llamada al sistema y soy plenamente consciente de que es posible que no lo haya. ¿He pasado por alto algo?