semget

SEMGET(2)               Manual del Programador de Linux              SEMGET(2)



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)