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)