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

NOMBRE

       semget - obtiene el identificador de un conjunto de semaforos

SINOPSIS

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

       int semget(key_t key, int nsems, int semflg);

DESCRIPCI'ON

       Esta  funcion  devuelve  el  identificador  del  conjunto  de semaforos
       asociado con el argumento key.  Un nuevo conjunto de nsems semaforos se
       crea  si  key  tiene  el  valor IPC_PRIVATE, o si no hay un conjunto de
       semaforos asociado a key y el bit IPC_CREAT vale  1  en  semflg  (p.ej.
       semflg & IPC_CREAT es distinto de cero).

       La  presencia  en  semflg  de  los campos IPC_CREAT e IPC_EXCL tiene el
       mismo papel, con respecto a la existencia del  conjunto  de  semaforos,
       que la presencia de O_CREAT y O_EXCL en el argumento mode de la llamada
       del sistema open(2): p.ej., la funcion semget falla si semflg tiene a 1
       tanto IPC_CREAT como IPC_EXCL y ya existe un conjunto de semaforos para
       key.

       Acerca de la creacion, los 9 bits bajos del  argumento  semflg  definen
       los  permisos  de  acceso  (para el propietario, grupo y otros) para el
       conjunto de semaforos.  Estos bits tienen el mismo formato, y el  mismo
       significado que el argumento de modo en las llamadas al sistema open(2)
       o creat(2) (aunque los permisos de ejecucion no son significativos para
       los  semaforos,  y  los  permisos de escritura significan permisos para
       alterar los valores del semaforo).

       Cuando se crea un nuevo conjunto de  semaforos,  semget  inicializa  la
       estructura  de  datos  semid_ds  asociada al conjunto de semaforos como
       sigue:

              Se pone el ID  de usuario efectivo del proceso  que  realiza  la
              llamada en sem_perm.cuid y sem_perm.uid

              Se  pone  el  ID  de  grupo  efectivo del proceso que realiza la
              llamada en sem_perm.cgid y sem_perm.gid

              Los 9 bits mas bajos de sem_perm.mode se ponen como los  9  bits
              mas bajos de semflg.

              Se pone el valor de nsems en sem_nsems.

              sem_otime se pone a 0.

              Se pone la hora actual en sem_ctime.

       El  argumento  nsems  puede  ser 0 (un comodin o valor sin importancia)
       cuando no se esta creando un conjunto de semaforos.  En otro caso nsems
       debe  ser mayor que 0 y menor o igual que el numero maximo de semaforos
       por conjunto de semaforos, (SEMMSL).

       Si el conjunto de semaforos ya  existe,  los  permisos  de  acceso  son
       verificados.

VALOR DEVUELTO

       Si  hubo exito, el valor devuelto sera el identificador del conjunto de
       semaforos (un entero no negativo), de otro modo,  se  devuelve  -1  con
       errno indicando el error.

ERRORES

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

       EACCES     Existe  un  conjunto  de semaforos para key, pero el proceso
                  que realiza la llamada no tiene  permisos  para  acceder  al
                  conjunto.

       EEXIST     Existe  un conjunto de semaforos para key y semflg tiene a 1
                  tanto IPC_CREAT como IPC_EXCL.

       ENOENT     No existe ningun conjunto de semaforos para key y semflg  no
                  tiene a 1 IPC_CREAT.

       EINVAL     nsems  es  menor que 0 o mayor que el limite en el numero de
                  semaforos por conjunto de semaforos (SEMMSL), o ya existe un
                  conjunto  de  semaforos que se corresponde con key , y nsems
                  es mayor que el numero de semaforos en ese conjunto.

       ENOMEM     Se ha de crear un conjunto de semaforos, pero el sistema  no
                  tiene suficiente memoria para la nueva estructura de datos.

       ENOSPC     Se  ha de crear un conjunto de semaforos, pero el limite del
                  sistema para el numero  maximo  de  conjuntos  de  semaforos
                  (SEMMNI),  o  el  numero  de  semaforos  maximo  del sistema
                  (SEMMNS), seria excedido.

OBSERVACIONES

       IPC_PRIVATE no es un campo bandera (flag), sino que es de tipo key_t Si
       este  valor  especial  es usado para key, la llamada del sistema ignora
       todo excepto los 9 bits mas bajos de semflg y crea un nuevo conjunto de
       semaforos (si hay exito).

       Los  siguientes  son  limites  de  los  recursos  de  los  conjuntos de
       semaforos que afectan a la llamada semget :

       SEMMNI     Maximo total de conjuntos  de  semaforos  para  el  sistema:
                  depende de la politica.

       SEMMSL     Maximo  de semaforos por semid: depende de la implementacion
                  (500 normalmente).

       SEMMNS     Maximo total de semaforos para el  sistema:  depende  de  la
                  politica.   Valores  mayores  que  SEMMSL  * SEMMNI lo hacen
                  irrelevante.

FALLOS

       La eleccion del nombre IPC_PRIVATE fue  quizas  desafortunada,  IPC_NEW
       mostraria mas claramente su funcion.

       La  estructura  de  datos asociada con cada semaforo del conjunto no es
       inicializada por  la  llamada  del  sistema.   Para  inicializar  estas
       estructuras  de  datos,  se  ha  de  ejecutar la subsiguiente llamada a
       semctl(2) para realizar una orden SETVAL o SETALL  en  el  conjunto  de
       semaforos.

CONFORME A

       SVr4,  SVID.   SVr4  documenta  condiciones de error adicionales EFBIG,
       E2BIG, EAGAIN, ERANGE, EFAULT.

V'EASE TAMBI'EN

       ftok(3), ipc(5), semctl(2), semop(2)