Provided by: manpages-es_1.55-8_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)