mincore(2) obtiene información de qué páginas están en memoria

SINOPSIS

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

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

DESCRIPCIÓN

La función mincore solicita un vector describiendo qué páginas de un fichero están en memoria y pueden ser leídas sin acceder a disco. El núcleo suministrará los datos para los length bytes siguientes a la dirección start. Cuando regrese, el núcleo habrá rellenado vec con bytes, de los cuales el bit menos significativo indica si una página está residente en memoria.

Para que mincore tenga éxito, start debe estar situada en un límite de página. Es responsabilidad del invocador redondear este valor a la página más cercana. El parámetro length no necesita ser un múltiplo del tamaño de página. El vector vec debe ser lo suficientemente grande para contener length/PAGE_SIZE bytes. El tamaño de página puede obtenerse con getpagesize(2).

VALOR DEVUELTO

En caso de éxito, mincore devuelve cero. En caso de error, se devuelve -1, y errno es modificado con el valor apropiado.

ERRORES

EAGAIN el núcleo se ha quedado temporalmente sin recursos
EINVAL
start no es múltiplo del tamaño de página, o len tiene un valor no positivo
EFAULT
vec apunta a una dirección inválida
ENOMEM
address a address + length contiene memoria sin ubicar, o la memoria no es parte de un fichero.

FALLOS

mincore debería devolver un vector de bits y no un vector de bytes, A partir de la versión 2.4.5 de Linux, no es posible obtener información sobre la residencia en memoria de páginas no respaldadas por un fichero. En otras palabras, una llamada a mincore sobre una región anónima devuelta por mmap(2) no funciona y asigna a errno el valor ENOMEM. A menos que las páginas estén bloqueadas en memoria, el contenido de vec puede estar desfasado para cuando alcancen el espacio de usuario.

CONFORME A

mincore no parece ser parte de POSIX o de la Single Unix Specification.

HISTORIA

La función mincore() apareció por primera vez en 4.4BSD.

DISPONIBILIDAD

Presente desde Linux 2.3.99pre1 y glibc 2.2.