¿Hay alguna forma de determinar si un archivo abierto se ha modificado con POSIX? Más específicamente, ¿cómo podría implementar is_modified()
a continuación?Determine si se ha modificado un archivo abierto en C
FILE *f = fopen("myfile", "r+");
// do various things with f
if (is_modified(f))
foo(f);
Para proporcionar algún contexto, estoy escribiendo un módulo en C que por cada archivo necesita almacenar su hash en una tabla. La interfaz proporciona contenedores para fopen()
y fclose()
y la función hash se puede hacer cuando el archivo está cerrado. Encontré varios enfoques para hacer esto, pero ninguno es tan eficiente, limpio o a prueba de errores como me gustaría:
- Calcule el hash de cada archivo abierto para escribir.
fflush(f)
y compruebe si la marca de tiempo ha cambiado.- Proporcionar envolturas alrededor
fwrite()
,fprintf()
, etc.
¿Alguna sugerencia?
Si eres el que abre el archivo, ¿por qué no simplemente hacer un seguimiento de si usted escribe en él o no? –
Para abstracción. Se supone que esto es un módulo que proporciona manejadores de archivos en los que los clientes pueden operar de la forma que deseen. No me gustaría modificar partes grandes de otros códigos que operan en archivos abiertos que usan funciones de biblioteca estándar. – nccc
Si desea evitar que otros procesos modifiquen sus archivos al mismo tiempo, eche un vistazo a [file locking] (http://en.wikipedia.org/wiki/File_locking). – jweyrich