Provided by:
manpages-es_1.55-10_all 
NOMBRE
semget - obtiene el identificador de un conjunto de semaforos
SINOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semget(key_t key, int nsems, int semflg);
DESCRIPCI'ON
Esta funcion devuelve el identificador del conjunto de semaforos
asociado con el argumento key. Un nuevo conjunto de nsems semaforos se
crea si key tiene el valor IPC_PRIVATE, o si no hay un conjunto de
semaforos 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 semaforos,
que la presencia de O_CREAT y O_EXCL en el argumento mode de la llamada
del sistema open(2): p.ej., la funcion semget falla si semflg tiene a 1
tanto IPC_CREAT como IPC_EXCL y ya existe un conjunto de semaforos para
key.
Acerca de la creacion, los 9 bits bajos del argumento semflg definen
los permisos de acceso (para el propietario, grupo y otros) para el
conjunto de semaforos. 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 ejecucion no son significativos para
los semaforos, y los permisos de escritura significan permisos para
alterar los valores del semaforo).
Cuando se crea un nuevo conjunto de semaforos, semget inicializa la
estructura de datos semid_ds asociada al conjunto de semaforos 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 mas bajos de sem_perm.mode se ponen como los 9 bits
mas 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 comodin o valor sin importancia)
cuando no se esta creando un conjunto de semaforos. En otro caso nsems
debe ser mayor que 0 y menor o igual que el numero maximo de semaforos
por conjunto de semaforos, (SEMMSL).
Si el conjunto de semaforos ya existe, los permisos de acceso son
verificados.
VALOR DEVUELTO
Si hubo exito, el valor devuelto sera el identificador del conjunto de
semaforos (un entero no negativo), de otro modo, se devuelve -1 con
errno indicando el error.
ERRORES
En caso de fallo, errno tendra uno de los siguientes valores:
EACCES Existe un conjunto de semaforos para key, pero el proceso
que realiza la llamada no tiene permisos para acceder al
conjunto.
EEXIST Existe un conjunto de semaforos para key y semflg tiene a 1
tanto IPC_CREAT como IPC_EXCL.
ENOENT No existe ningun conjunto de semaforos para key y semflg no
tiene a 1 IPC_CREAT.
EINVAL nsems es menor que 0 o mayor que el limite en el numero de
semaforos por conjunto de semaforos (SEMMSL), o ya existe un
conjunto de semaforos que se corresponde con key , y nsems
es mayor que el numero de semaforos en ese conjunto.
ENOMEM Se ha de crear un conjunto de semaforos, pero el sistema no
tiene suficiente memoria para la nueva estructura de datos.
ENOSPC Se ha de crear un conjunto de semaforos, pero el limite del
sistema para el numero maximo de conjuntos de semaforos
(SEMMNI), o el numero de semaforos maximo del sistema
(SEMMNS), seria 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 mas bajos de semflg y crea un nuevo conjunto de
semaforos (si hay exito).
Los siguientes son limites de los recursos de los conjuntos de
semaforos que afectan a la llamada semget :
SEMMNI Maximo total de conjuntos de semaforos para el sistema:
depende de la politica.
SEMMSL Maximo de semaforos por semid: depende de la implementacion
(500 normalmente).
SEMMNS Maximo total de semaforos para el sistema: depende de la
politica. Valores mayores que SEMMSL * SEMMNI lo hacen
irrelevante.
FALLOS
La eleccion del nombre IPC_PRIVATE fue quizas desafortunada, IPC_NEW
mostraria mas claramente su funcion.
La estructura de datos asociada con cada semaforo 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
semaforos.
CONFORME A
SVr4, SVID. SVr4 documenta condiciones de error adicionales EFBIG,
E2BIG, EAGAIN, ERANGE, EFAULT.
V'EASE TAMBI'EN
ftok(3), ipc(5), semctl(2), semop(2)