J'ai un programme qui mappe pas mal de fichiers (de 100) de 10 à 100 Mo chacun. J'ai besoin qu'ils soient tous cartographiés en même temps.
En ce moment j'appelle open
suivi de mmap
au début du programme, suivi de munmap
et close
à la fin.
Je dois souvent ajuster la limite de fichiers ouverts en cours d'exécution ulimit -n
avant d'exécuter le programme.
La question est de savoir si j'ai vraiment besoin de garder les fichiers ouverts, ou puis-je open
mmap
close
faire un gros traitement de données puis munmap
quand j'ai fini .
Les pages de manuel de mmap
ne me semblent pas très claires à ce sujet.
Non, du moins pas sous Linux, c'est bien de fermer le fichier.
La page de manuel indique clairement:
En revanche, la fermeture du descripteur de fichier ne démappe pas la région.
Pour la portabilité, j'ai également vérifié le manuel POSIX , il dit la même chose (bien que plus clairement encore):
La fonction mmap () ajoute une référence supplémentaire au fichier associé au descripteur de fichier fildes qui n'est pas supprimé par la suite close () sur ce descripteur de fichier. Cette référence est supprimée lorsqu'il n'y a plus de mappages vers le fichier.