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'ON

       shmctl()  permite  al  usuario recibir informacion sobre un segmento de
       memoria compartida, establecer el dueno, grupo y permisos del segmento,
       asi como destruirlo. La informacion sobre el segmento identificado como
       shmid se devuelve en una estructura shmid_ds:

           struct shmid_ds {
               struct ipc_perm shm_perm;  /* permisos de operacion */
               int shm_segsz;             /* tamano del segmento (bytes) */
               time_t shm_atime;          /* tiempo de la ultima union */
               time_t shm_dtime;          /* tiempo de la ultima separacion */
               time_t shm_ctime;          /* tiempo de la ultima modificacion */
               unsigned short shm_cpid;   /* pid del creador */
               unsigned short shm_lpid;   /* pid of ultimo operador */
               short shm_nattch;          /* no. 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 mas bajos de los modos de acceso */
               ushort seq;   /* numero de secuencia */
           };

       Estan disponibles los siguientes cmds:

       IPC_STAT    se usa para copiar la  informacion  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.  Solo
                   se usan los 9 bits mas bajos de mode.  El miembro shm_ctime
                   tambien es actualizado.  El  usuario  debe  ser  el  dueno,
                   creador o el superusuario.

       IPC_RMID    se usa para marcar el segmento como destruido. En realidad,
                   se destruira despues de la  ultima  separacion  (es  decir,
                   cuando  el  miembro  shm_nattch  de  la estructura asociada
                   shmid_ds sea cero). El usuario debe ser el dueno, creador o
                   el superusuario.

       El  usuario debe asegurarse de que el segmento se destruye al final; de
       lo contrario, las paginas de dicho segmento que se cargaron en  memoria
       al producir un fallo de pagina, permaneceran en memoria o en el fichero
       de intercambio.

       Ademas, el superusuario puede impedir o permitir  que  un  segmento  de
       memoria  compartida  pase  al fichero de intercambio con las siguientes
       ordenes (solo Linux):

       SHM_LOCK    impide que  un  segmento  de  memoria  compartida  pase  al
                   fichero  de intercambio.  El usuario debe cargar en memoria
                   mediante fallos de pagina  cualquier  pagina  que  necesite
                   estar presente despues 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  informacion  sobre  los recursos
       asignados. En el futuro, estos pueden ser modificados segun se necesite
       o movidos a un sistema de ficheros proc.

VALOR DEVUELTO

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

ERRORES

       En caso de error, errno tomara 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
                   direccion apuntada por buf no es accesible.

       EINVAL      se devuelve si shmid no es un identificador valido o cmd no
                   es una orden valida.

       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  (segun  figura   en   shm_perm.cuid),   el
                   propietario  (segun  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 esto,
       deberia bastar una recompilacion bajo  glibc-2.1.91  o  alguna  version
       posterior.  (El nucleo 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
       condicion de error EIDRM.

V'EASE TAMBI'EN

       shmget(2), shmop(2)