Section: Manual del Programador de Linux (2)
Updated: 28 enero 1998
Index Return to Main
Contents
shmop - operaciones cno memoria compartida
# include <sys/types.h> # include <sys/shm.h>
void *shmat ( int shmid, const void *shmaddr, int shmflg )
int shmdt ( const void *shmaddr)
La función shmat pega el segmento de memoria compartida identificada por shmid al segmento de datos del proceso que llama a la función. La dirección del pegado se especifica en shmaddr según uno de los criterios siguientes:
Si SHM_RDONLY está activado en shmflg, el segmento se pega para lectura y el proceso debe tener permiso de lectura en el segmento. De otro modo el segmento se pega para lectura y escritura y debe tener permisos de lectura y escritura en el segmento. No existe la noción de segmentos de memoria compartida de escritura exclusiva.
El valor de brk del proceso que llama a la función no se altera por el pegado. El segmento se despegará automáticamente cuendo el proceso se acabe. El mismo segmento puede ser pegaado como de lectura y de lectura-escritura, y más de una vez, en el espacio de direcciones del proceso.
Tras una llamada exitosa a shmat el sistema actualiza los miembros de la estructura shmid_ds asociada al segmento de memoria compartida como sigue:
Observe que el pegado tiene éxito también si el segmento de memoria compartida se marca como para ser borrado.
La función shmdt despega del segmento de datos del proceso que la llama el segmento de memoria compartida localizado en la dirección especificada por shmaddr. El segmento de memoria compartida despegado debe ser uno de entre los pegados actualmente (al espacio de direcciones del proceso) con shmaddr igual al valor devuelto por su llamada de pegado shat.
Tras una llamada exitosa a shmdt el sistema actualiza los miembros de la estructura shmid_ds asociada al segmento de memoria compartida como sigue:
La región ocupada en el espacio de usuario del proceso llamador es desasociada.
En caso de fallo ambas funciones devuelven -1 con errno indicando el error; en otro caso shmat devuelve la dirección del segmento de memoria compartido pegado, y shmdt devuelve 0.
Cuando shmat falla, al regresar, errno tendrá uno de entre los siguientes valores:
La función shmdt puede fallar sólo si no hay segmento de memoria compartida pegada en shmaddr, en cuyo caso al regresar errno tendrá el valor EINVAL.
Al ejecutar una llamada al sistema fork(2), el hijo hereda todos los segmentos de memoria compartida pegados.
Los segmentos de memoria compartida pegados a un proceso que ejecuta una llamada al sistema execve(2) no serán pegados en el proceso resultante.
El siguiente es un parámetro del sistema que afecta a la llamada al sistema shmat:
La implementación no tiene un límite intrínseco para el número máximo de segmentos de memoria compartida por proceso (SHMSEG)
SVr4, SVID. SVr4 documenta una condición de error adicional EMFILE. En SVID-v4, el tipo del argumento shmaddr se cambió de char * a const void *, y el tipo del valor devuelto por shmat() de char * a void *. (Linux libc4 y libc5 poseen los prototipos char *. glibc2 posee void *.)
This document was created by man2html, using
the manual pages.
Time: 06:16:21 GMT, January 22, 2005