MINCORE(2)

NOM
mincore - Déterminer si des pages se trouvent en mémoire physique

SYNOPSIS
#include <unistd.h>
#include <sys/mman.h>

int mincore(void *addr, size_t length, unsigned char *vec);

Exigences de macros de test de fonctionnalités pour la glibc (voir feature_test_macros(7)) :

mincore() : _BSD_SOURCE || _SVID_SOURCE

DESCRIPTION
mincore() renvoie un vecteur qui indique si des pages de mémoire virtuelle du processus appelant sont présentes en mémoire physique (RAM), auquel cas un accès à ces pages ne provoquera pas d'accès disque (défaut de page). Le noyau renvoie les informations concernant les pages à partir de l'adresse addr sur une longueur de length octets. L'argument addr doit être un multiple de la taille de page du système. Il n'est pas nécessaire que l'argument length soit un multiple de la taille de page du système, mais puisque les informations sont renvoyées pour des pages entières, length est arrondie par excès au multiple de la taille de page du système. On peut obtenir la taille de page (PAGE_SIZE) avec sysconf(_SC_PAGESIZE). L'argument vec doit pointer vers un tableau de taille au moins égale (length+PAGE_SIZE-1) / PAGE_SIZE octets. En retour, le bit de poids faible de chaque octet sera positionné à 1 si la page correspondante est présente en mémoire physique et à 0 autrement. (L'état des autres bits de chaque octet est indéfini ; ces bits sont réservés pour une éventuelle utilisation ultérieure.) Bien entendu, les informations renvoyées dans vec ne sont qu'un instantané : les pages qui ne sont pas verrouillées en mémoire peuvent aller et venir à tout moment, et le contenu de vec peut être déjà périmé au retour de l'appel.

VALEUR RENVOYÉE
S'il réussit, mincore() renvoie zéro. En cas d'erreur, il renvoie -1 et renseigne errno en conséquence.

ERREURS
EAGAIN Le noyau manque temporairement de ressources.

EFAULT
    vec pointe vers une adresse illégale.

EINVAL
    addr n'est pas aligné sur une frontière de page.

ENOMEM
    length est plus grand que (TASK_SIZE - addr). (Cela peut se produire si une valeur négative est fournie à length, puisque cette valeur sera interprétée comme étant un très grand entier non signé.) Sous Linux 2.6.11 et antérieurs, l'erreur EINVAL était renvoyé dans ce cas là.

ENOMEM
    La zone entre addr et addr + length contient de la mémoire non projetée.

VERSIONS
Disponible depuis Linux 2.3.99pre1 et glibc 2.2.

CONFORMITÉ
mincore() n'est pas spécifiée par POSIX.1-2001 et n'est pas disponible sur toutes les implémentations Unix.

BOGUES
Avant le noyau 2.6.21, mincore() ne renvoyait pas d'information correcte pour des projections MAP_PRIVATE, ou pour des projections non linéaires (établies en utilisant remap_file_pages(2)).

VOIR AUSSI
mlock(2), mmap(2)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 17 janvier 2002 et révisée le 23 juin 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 mincore ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.