Provided by: manpages-es_1.55-10_all bug

NOMBRE

       mremap - re-asocia una direccion de memoria virtual

SINOPSIS

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

       void  *mremap(void  *vieja_dir,  size_t  viejo_tam  , size_t nuevo_tam,
       unsigned long flags);

DESCRIPCI'ON

       mremap  expande  (o  encoge)  una  asociacion  existente  de   memoria,
       moviendola  potencialmente a la vez (segun se controle por el argumento
       flags y segun el espacio de direcciones virtuales disponible).

       vieja_dir es la direccion antigua del bloque de memoria virtual que Ud.
       quiere  expandir  (o  encoger).  Observe  que vieja_dir tiene que tener
       alineamiento de pagina. viejo_tam es el antiguo tamano  del  bloque  de
       memoria  virtual.  nuevo_tam  es el tamano pedido del bloque de memoria
       virtual tras el cambio de tamano.

       El argumento flags es un mapa de bits de opciones.

       En Linux la memoria se divide en paginas. Un proceso de  usuario  tiene
       (uno  o) varios segmentos de memoria virtual lineales. Cada segmento de
       memoria virtual tiene una o mas asociaciones a paginas de memoria  real
       (en  la  tabla  de  paginas). Cada segmento de memoria virtual tiene su
       propia  proteccion  (derechos  de  acceso),  que  pueden  producir  una
       violacion de segmento si a la memoria se accede incorrectamente (p.ej.,
       por escribir en un segmento de lectura exclusiva).  Acceder  a  memoria
       virtual  fuera  de  los  segmentos  tambien  producira una violacion de
       segmento.

       mremap emplea el esquema de tabla de paginas de Linux.   mremap  cambia
       la  asociacion  entre  direcciones virtuales y paginas de memoria. Esto
       puede emplearse para implementar un realloc muy eficiente.

FLAGS

       MREMAP_MAYMOVE
              indica si la operacion, en vez de  fallar,  deberia  cambiar  la
              direccion  virtual si el cambio de tamano no puede hacerse en el
              espacio virtual actual.

VALOR DEVUELTO

       En caso de exito, mremap devuelve un puntero a la nueva area de memoria
       virtual.  En caso de error, se devuelve -1 y se pone un valor apropiado
       en errno.

ERRORES

       EINVAL Se ha dado  un  argumento  invalido.  Lo  mas  probable  es  que
              vieja_dir no tenga alineamiento de pagina.

       EFAULT "Segmentation   fault",  o  sea,  "fallo  de  segmento".  Alguna
              direccion del  rango  vieja_dir  a  vieja_dir+viejo_tam  es  una
              direccion   de  memoria  virtual  invalida  para  este  proceso.
              Tambien uno puede obtener EFAULT incluso si existen asociaciones
              que  cubren el espacio entero pedido, pero esas asociaciones son
              de tipos diferentes.

       EAGAIN El segmento de memoria esta bloqueado y no puede re-asociarse.

       ENOMEM El area de memoria no puede expandirse en la  direccion  virtual
              en curso, y la opcion MREMAP_MAYMOVE no esta puesta en flags.  O
              bien, no hay bastante memoria (virtual) disponible.

OBSERVACIONES

       Con las cabeceras actuales de glibc,  para  obtener  la  definicion  de
       MREMAP_MAYMOVE,   necesita   definir   _GNU_SOURCE   antes  de  incluir
       <sys/mman.h>.

CONFORME A

       Esta llamada  es  especifica  de  Linux,  y  no  deberia  emplearse  en
       programas  que  se  pretendan  transportables. 4.2BSD tenia una llamada
       igual  (nunca  implementada  realmente)  mremap(2)  con  una  semantica
       completamente diferente.

V'EASE TAMBI'EN

       getpagesize(2), realloc(3), malloc(3), brk(2), sbrk(2), mmap(2)

       Su  libro de texto favorito de Sistemas Operativos para mas informacion
       sobre la memoria paginada. Por ejemplo:  Sistemas  Operativos  Modernos
       por  Andrew  S.  Tannenbaum,  Inside  Linux  por Randolf Bentson, o The
       Design of the UNIX Operating System por Maurice J. Bach.