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

NOMBRE

       shmctl - control de memoria compartida

SINOPSIS

       #include <sys/ipc.h>

       #include <sys/shm.h>

       int shmctl(int shmid, int cmd, struct shmid_ds *buf);

DESCRIPCIÓN

       shmctl()  permite  al  usuario recibir información sobre un segmento de memoria compartida, establecer el
       dueño, grupo y permisos del segmento, así como destruirlo. La información sobre el segmento  identificado
       como shmid se devuelve en una 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 de la última modificación */
               unsigned short shm_cpid;   /* pid del creador */
               unsigned short shm_lpid;   /* pid of último operador */
               short shm_nattch;          /* nº. de uniones actuales */
               ...
           };

       Los campos resaltados del miembro shm_perm pueden ser modificados:

           struct ipc_perm {
               key_t  key;
               ushort uid;   /* euid y egid del propietario */
               ushort gid;
               ushort cuid;  /* euid y egid del creador */
               ushort cgid;
               ushort mode;  /* 9 bits más bajos de los modos de acceso */
               ushort seq;   /* número de secuencia */
           };

       Están disponibles los siguientes cmds:

       IPC_STAT    se  usa  para  copiar  la  información  sobre el segmento de memoria compartida en la memoria
                   intermedia buf. El usuario debe tener permiso de lectura del segmento de memoria compartida.

       IPC_SET     se usa para aplicar los cambios que el usuario ha efectuado en los miembros uid, gid, o  mode
                   del campo shm_perms. Sólo se usan los 9 bits más bajos de mode.  El miembro shm_ctime también
                   es actualizado. El usuario debe ser el dueño, creador o el superusuario.

       IPC_RMID    se usa para marcar el segmento como destruido. En realidad, se destruirá después de la última
                   separación  (es  decir,  cuando  el miembro shm_nattch de la estructura asociada shmid_ds sea
                   cero). El usuario debe ser el dueño, creador o el superusuario.

       El usuario debe asegurarse de que el segmento se destruye al final; de lo contrario, las páginas de dicho
       segmento que se cargaron en memoria al producir un fallo de página,  permanecerán  en  memoria  o  en  el
       fichero de intercambio.

       Además, el superusuario puede impedir o permitir que un segmento de memoria compartida pase al fichero de
       intercambio con las siguientes órdenes (sólo Linux):

       SHM_LOCK    impide que un segmento de memoria compartida pase al fichero de intercambio.  El usuario debe
                   cargar  en  memoria  mediante  fallos  de página cualquier página que necesite estar presente
                   después de que se habilite el bloqueo.

       SHM_UNLOCK  permite sacar del fichero de intercambio al segmento de memoria compartida.

       Las llamadas de  control  IPC_INFO,  SHM_STAT  y  SHM_INFO  son  usadas  por  el  programa  ipcs(8)  para
       proporcionar  información  sobre los recursos asignados. En el futuro, éstos pueden ser modificados según
       se necesite o movidos a un sistema de ficheros proc.

VALOR DEVUELTO

       En caso de éxito se devuelve 0, en caso de error -1.

ERRORES

       En caso de error, errno tomará uno de los siguientes valores:

       EACCES      se devuelve si se pide IPC_STAT y shm_perm.modes no permite acceso de lectura para shmid.

       EFAULT      el argumento cmd tiene el valor IPC_SET o IPC_STAT pero la dirección apuntada por buf  no  es
                   accesible.

       EINVAL      se devuelve si shmid no es un identificador válido o cmd no es una orden válida.

       EIDRM       se devuelve si shmid apunta a un identificador borrado.

       EPERM       se  devuelve  si  se  intenta  IPC_SET  o IPC_RMID y el identificador de usuario efectivo del
                   proceso invocador no es el creador (según figura en  shm_perm.cuid),  el  propietario  (según
                   figura en shm_perm.uid), o el super-usuario.

       EOVERFLOW   se  devuelve  si  se  intenta  IPC_STAT,  y  el  valor gid o uid es demasiado grande para ser
                   almacenado en la estructura apuntada por buf.

NOTA

       Algunos campos de la estructura shmid_ds eran de tipo short bajo Linux 2.2 y se han convertido a long  en
       Linux 2.4. Para aprovecharse de ésto, debería bastar una recompilación bajo glibc-2.1.91 o alguna versión
       posterior.  (El núcleo distingue las llamadas antiguas y nuevas por una bandera IPC_64 en cmd.)

CONFORME A

       SVr4,  SVID.  SVr4 documenta las condiciones de error adicionales EINVAL, ENOENT, ENOSPC, ENOMEM, EEXIST.
       Ni SVr4 ni SVID documentan una condición de error EIDRM.

VÉASE TAMBIÉN

       shmget(2), shmop(2)

Linux 2.4.1                                       5 enero 2002                                         SHMCTL(2)