que - ¿Debo mantener abierto un archivo después de llamar a mmap?
para que sirve include en c (1)
Tengo un programa que mapea bastantes (100) de archivos considerables de 10-100MB cada uno. Los necesito a todos asignados al mismo tiempo.
En este momento estoy llamando open
seguido de mmap
al comienzo del programa, seguido de munmap
y close
al final.
A menudo tengo que ajustar el límite de archivos abiertos corriendo ulimit -n
antes de ejecutar el programa.
La pregunta es, ¿de verdad necesito mantener los archivos abiertos, o puedo open
mmap
close
un gran procesamiento de datos, luego munmap
cuando haya terminado.
Las páginas man de mmap
no me parecen terriblemente claras en este caso.
No, al menos no en Linux, está bien cerrar el archivo.
La página del manual establece claramente:
Por otro lado, al cerrar el descriptor de archivo no se desasigna la región.
Para la portabilidad, también revisé el manual de POSIX , dice lo mismo (aunque aún más claro):
La función mmap () agrega una referencia adicional al archivo asociado con los archivos descriptores del archivo que no se elimina mediante un cierre () posterior en ese descriptor de archivo. Esta referencia se elimina cuando no hay más asignaciones al archivo.