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

NOMBRE

       semctl - operaciones de control de semaforos

SINOPSIS

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/sem.h>

       int semctl(int semid, int semnum, int cmd, ...);

DESCRIPCI'ON

       La  funcion semctl realiza la operacion de control especificada por cmd
       sobre el conjunto de semaforos identificado por semid, o en el semaforo
       semnum-th  de  dicho conjunto.  (Los semaforos son numerados comenzando
       por el 0.)

       Esta funcion tiene tres o cuatro  argumentos.  Cuando  hay  cuatro,  la
       llamada  es semctl(semid,semnum,cmd,arg); donde el cuarto argumento arg
       tiene como tipo union semun definido como sigue:

       #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
       /* la union semun se define al incluir <sys/sem.h> */
       #else
       /* segun X/OPEN tenemos que definirla nosostros mismos */
       union semun {
               int val;                    /* valor para SETVAL */
               struct semid_ds *buf;       /* buffer para IPC_STAT, IPC_SET */
               unsigned short int *array;  /* array para GETALL, SETALL */
               struct seminfo *__buf;      /* buffer para IPC_INFO */
       };
       #endif

       Valores validos para cmd son:

       IPC_STAT    Copiar informacion de la estructura de datos  del  conjunto
                   de  semaforos  en  la  estructura apuntada por arg.buf.  El
                   argumento semnum es ignorado.  El proceso  que  realiza  la
                   llamada  debe  tener privilegios de acceso de lectura en el
                   conjunto de semaforos.

       IPC_SET     Escribir los valores de algunos miembros de  la  estructura
                   semid_ds  apuntada por arg.buf a la estructura de datos del
                   conjunto de  semaforos,  actualizando  tambien  su  miembro
                   sem_ctime.   Los  miembros de la estructura provista por el
                   usuario struct semid_ds a los que apunta arg.buf son

                           sem_perm.uid
                           sem_perm.gid
                           sem_perm.mode   /* solo los 9 bits mas bajos */

                   El identificador de usuario efectivo del proceso  invocador
                   debe  ser  el  del  super-usuario,  o  coincidir con el del
                   creador  o  propietario  del  conjunto  de  semaforos.   El
                   argumento semnum es ignorado.

       IPC_RMID    Borrar  inmediatamente  el  conjunto  de  semaforos  y  sus
                   estructuras de datos, despertando  todos  los  procesos  en
                   espera  (devuelve  un  error,  y errno puesto a EIDRM).  El
                   identificador de usuario  efectivo  del  proceso  invocador
                   debe  ser  el  del  super-usuario,  o  coincidir con el del
                   creador  o  propietario  del  conjunto  de  semaforos.   El
                   argumento semnum es ignorado.

       GETALL      Devuelve  semval  para todos los semaforos del conjunto, en
                   arg.array.  El argumento semnum es  ignorado.   El  proceso
                   que  realiza  la llamada ha de tener privilegios de lectura
                   en el conjunto de semaforos.

       GETNCNT     La llamada al sistema devuelve el valor de semncnt para  el
                   semnum-avo  semaforo  del  conjunto  (p.ej.  el  numero  de
                   procesos esperando que aumente semval  para  el  semnum-avo
                   semaforo  del conjunto).  El proceso que realiza la llamada
                   ha de tener  privilegios  de  lectura  en  el  conjunto  de
                   semaforos.

       GETPID      La  llamada  al sistema devuelve el valor de sempid para el
                   semnum-avo semaforo del conjunto (p.ej. el pid del  proceso
                   que  ejecuto  la  ultima  llamada  semop para el semnum-avo
                   semaforo del conjunto).  El proceso que realiza la  llamada
                   ha  de  tener  privilegios  de  lectura  en  el conjunto de
                   semaforos.

       GETVAL      La llamada al sistema devuelve el valor de semval  para  el
                   semnum-avo  semaforo  del conjunto.  El proceso que realiza
                   la llamada  ha  de  tener  privilegios  de  lectura  en  el
                   conjunto de semaforos.

       GETZCNT     La  llamada al sistema devuelve el valor de semzcnt para el
                   semnum-avo  semaforo  del  conjunto  (p.ej.  el  numero  de
                   procesos que esperan que semval del semnum-avo semaforo del
                   conjunto se ponga a 0).  El proceso que realiza la  llamada
                   ha  de  tener  privilegios  de  lectura  en  el conjunto de
                   semaforos.

       SETALL      Poner semval para todos los semaforos del  conjunto  usando
                   arg.array,  actualizando tambien el miembro sem_ctime de la
                   estructura semid_ds asociada al conjunto.  Los registros de
                   anulacion  son  limpiados, para los semaforos cambiados, en
                   todos los procesos. Los procesos que estan durmiendo en  la
                   cola  de espera son despertados si algun semval se pone a 0
                   o se incrementa.  El  argumento  semnum  es  ignorado.   El
                   proceso  que  realiza la llamada ha de tener privilegios de
                   modificacion en el conjunto de semaforos.

       SETVAL      Poner el valor de  semval  a  arg.val  para  el  semnum-avo
                   semaforo  del  conjunto,  actualizando  tambien  el miembro
                   sem_ctime de la estructura semid_ds asociada  al  conjunto.
                   El  registro  de  anulacion  es  limpiado, para el semaforo
                   alterado, en todos los procesos.  Los  procesos  que  estan
                   durmiendo en la cola de espera son despertados si semval se
                   pone a 0 o  se  incrementa.   El  proceso  que  realiza  la
                   llamada ha de tener privilegios de escritura en el conjunto
                   de semaforos.

VALOR DEVUELTO

       En caso de fallo semctl devuelve -1, mientras errno  indica  el  error.
       De  otro  modo,  la  llamada  al sistema devuelve un valor no negativo,
       dependiendo de cmd como sigue:

       GETNCNT    el valor de semncnt.

       GETPID     el valor de sempid.

       GETVAL     el valor de semval.

       GETZCNT    el valor de semzcnt.

       Todos los demas valores cmd devuelven 0 en caso de exito.

ERRORES

       En caso de error, errno tendra uno de los siguientes valores:

       EACCESS    El proceso que reliza  la  llamada  no  tiene  los  permisos
                  necesarios para ejecutar cmd.

       EFAULT     La  direccion  a  la  que  apunta  arg.buf o arg.array no es
                  accesible.

       EIDRM      El conjunto de semaforos se borro.

       EINVAL     Valor no valido para cmd o semid.

       EPERM      El argumento cmd tiene valor  IPC_SET  o  IPC_RMID  pero  el
                  proceso  invocador  no  tiene  suficientes  privilegios para
                  ejecutar la orden.

       ERANGE     El argumento cmd tiene el valor SETALL o SETVAL y  el  valor
                  al  que  ha  de  ser  puesto semval (para algun semaforo del
                  conjunto) es menor que 0 o mayor que el valor SEMVMX  de  la
                  implementacion.

OBSERVACIONES

       Las  llamadas  de  control IPC_INFO, SEM_STAT y SEM_INFO son utilizadas
       por  el  programa  ipcs(8)  para  proveer  informacion  sobre  recursos
       asignados.   En  el  futuro pueden ser modificadas segun se necesite, o
       llevadas al interfaz del sistema de ficheros proc.

       Varios campos de la estructura semid_ds eran de tipo short  bajo  Linux
       2.2  y  se  han  convertido a tipo long bajo Linux 2.4. Para aprovechar
       esto, seria suficiente volver a compilar bajo glibc-2.1.91 o posterior.
       (El  nucleo  distingue  las  llamadas  antiguas y nuevas por una opcion
       IPC_64 en cmd.)

       El siguiente limite de sistema para conjuntos de semaforos afecta a  la
       llamada semctl:

       SEMVMX     Valor  maximo  para  semval:  depende  de  la implementacion
                  (32767).

       Para una mayor portabilidad siempre es mejor llamar a semctl con cuatro
       argumentos.

       Bajo Linux, la funcion semctl no es una llamada al sistema, sino que es
       implementada a traves de la llamada al sistema ipc(2).

CONFORME A

       SVr4, SVID.  SVr4 documenta adicionalmente  las  condiciones  de  error
       EINVAL y EOVERFLOW.

V'EASE TAMBI'EN

       ipc(2), shmget(2), shmat(2), shmdt(2), ipc(5)