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)

Linux 2.5                                         4 enero 2002                                         SEMGET(2)