Section: Manual del programador de Linux (2)
Updated: 28 noviembre 1993
Index Return to Main
Contents
shmget - asigna un segmento de memoria compartida
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);
devuelve el identificativo del segmento de memoria compartida asociado al valor del argumento key. Se crea un nuevo segmento de memoria compartida, de tamaño igual al múltiplo de PAGE_SIZE más aproximado (por exceso) a size, si key tiene el valor IPC_PRIVATE o key no es IPC_PRIVATE, no hay ningún segmento de memoria compartida asociado a key, y IPC_CREAT está declarado en shmflg (es decir, shmflg&IPC_CREAT es distinto de cero). La presencia en
shmflg está compuesta de:
Si se crea un nuevo segmento, los permisos de acceso de shmflg son copiados al miembro shm_perm de la estructura shmid_ds que define el segmento. La estructura shmid_ds:
struct shmid_ds { struct ipc_perm shm_perm; /* permisos de operación */ int shm_segsz; /* tamaño del segmento (bytes) */ time_t shm_atime; /* tiempo de la última unión */ time_t shm_dtime; /* tiempo de la última separación */ time_t shm_ctime; /* tiempo del último cambio */ unsigned short shm_cpid; /* pid del creador */ unsigned short shm_lpid; /* pid del último operador */ short shm_nattch; /* nº de uniones actuales */ };
struct ipc_perm { key_t key; ushort uid; /* euid y egid del dueño */ ushort gid; ushort cuid; /* euid y egid del creador */ ushort cgid; ushort mode; /* 9 bits más bajos de shmflg */ ushort seq; /* número de secuencia */ };
Además, mientras se crea, la llamada del sistema inicializa la estructura de datos shmid_ds del segmento de memoria compartida del sistema como sigue:
Si el segmento de memoria compartida ya existe, se verifican los permisos de acceso, y se comprueba si está marcado para destrucción.
En caso de éxito se devuelve el identificativo válido de segmento shmid. En caso de error se devuelve -1.
En caso de error, errno tomará uno de los siguientes valores:
no es un indicador, sino un tipo key_t. Si se usa este valor especial para key, la llamada del sistema ignora todos menos los 9 bits más bajos de shmflg y crea un nuevo segmento de memoria compartida (en caso de éxito).
Los siguientes son los límites de los recursos de un segmento de memoria compartida afectados por una llamada shmget:
La implementación no tiene límites específicos respecto al máximo número de segmentos de memoria compartida por proceso (SHMSEG).
El uso de IPC_PRIVATE no impide a otros procesos el acceso al segmento de memoria compartida asignado.
Del mismo modo que ocurre con los ficheros, actualmente no hay ningún modo intrínseco por el que un proceso pueda asegurarse acceso exclusivo a un segmento de memoria compartida. Declarar tanto IPC_CREAT como IPC_EXCL en shmflg sólo asegura, en caso de éxito, que se creará un nuevo segmento de memoria compartida. No implica acesso exclusivo a dicho segmento.
SVr4, SVID. SVr4 documenta la condición de error adicional EEXIST. Ni SVr4 ni SVID documentan una condición EIDRM.
(3), ipc(5), shmctl(2), shmat(2), shmdt(2)
This document was created by man2html, using
the manual pages.
Time: 06:16:21 GMT, January 22, 2005