web-dev-qa-db-fra.com

Dois-je garder un fichier ouvert après avoir appelé mmap dessus?

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 openmmapclose 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.

57
camelccc

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.

58
unwind