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

NOMBRE

       semget - obtiene el identificador de un conjunto de semáforos

SINOPSIS

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

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

DESCRIPCIÓN

       Esta  función  devuelve  el  identificador  del  conjunto  de semáforos
       asociado con el argumento key.  Un nuevo conjunto de nsems semáforos se
       crea  si  key  tiene  el  valor IPC_PRIVATE, o si no hay un conjunto de
       semáforos 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  semáforos,
       que la presencia de O_CREAT y O_EXCL en el argumento mode de la llamada
       del sistema open(2): p.ej., la función semget falla si semflg tiene a 1
       tanto IPC_CREAT como IPC_EXCL y ya existe un conjunto de semáforos para
       key.

       Acerca de la creación, los 9 bits bajos del  argumento  semflg  definen
       los  permisos  de  acceso  (para el propietario, grupo y otros) para el
       conjunto de semáforos.  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 ejecución no son significativos para
       los  semáforos,  y  los  permisos de escritura significan permisos para
       alterar los valores del semáforo).

       Cuando se crea un nuevo conjunto de  semáforos,  semget  inicializa  la
       estructura  de  datos  semid_ds  asociada al conjunto de semáforos 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 más bajos de sem_perm.mode se ponen como los  9  bits
              más 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 comodín o valor sin importancia)
       cuando no se está creando un conjunto de semáforos.  En otro caso nsems
       debe  ser mayor que 0 y menor o igual que el número máximo de semáforos
       por conjunto de semáforos, (SEMMSL).

       Si el conjunto de semáforos ya  existe,  los  permisos  de  acceso  son
       verificados.

VALOR DEVUELTO

       Si  hubo éxito, el valor devuelto será el identificador del conjunto de
       semáforos (un entero no negativo), de otro modo,  se  devuelve  -1  con
       errno indicando el error.

ERRORES

       En caso de fallo, errno tendrá uno de los siguientes valores:

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

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

       ENOENT     No existe ningún conjunto de semáforos para key y semflg  no
                  tiene a 1 IPC_CREAT.

       EINVAL     nsems  es  menor que 0 o mayor que el límite en el número de
                  semáforos por conjunto de semáforos (SEMMSL), o ya existe un
                  conjunto  de  semáforos que se corresponde con key , y nsems
                  es mayor que el número de semáforos en ese conjunto.

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

       ENOSPC     Se  ha de crear un conjunto de semáforos, pero el límite del
                  sistema para el número  máximo  de  conjuntos  de  semáforos
                  (SEMMNI),  o  el  número  de  semáforos  máximo  del sistema
                  (SEMMNS), sería 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 más bajos de semflg y crea un nuevo conjunto de
       semáforos (si hay éxito).

       Los  siguientes  son  límites  de  los  recursos  de  los  conjuntos de
       semáforos que afectan a la llamada semget :

       SEMMNI     Máximo total de conjuntos  de  semáforos  para  el  sistema:
                  depende de la política.

       SEMMSL     Máximo  de semáforos por semid: depende de la implementación
                  (500 normalmente).

       SEMMNS     Máximo total de semáforos para el  sistema:  depende  de  la
                  política.   Valores  mayores  que  SEMMSL  * SEMMNI lo hacen
                  irrelevante.

FALLOS

       La elección del nombre IPC_PRIVATE fue  quizás  desafortunada,  IPC_NEW
       mostraría más claramente su función.

       La  estructura  de  datos asociada con cada semáforo 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
       semáforos.

CONFORME A

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

VÉASE TAMBIÉN

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