SEMGET(2) System Calls Manual SEMGET(2)
semget - get set of semaphores
int semget(key, nsems, semflg)
int nsems, semflg;
semget() returns the semaphore identifier associated with key.
A semaphore identifier and associated data structure and set containing
nsems semaphores (see intro(2)) are created for key if one of the fol-
lowing are true:
o key is equal to IPC_PRIVATE.
o key does not already have a semaphore identifier associated with it,
and (semflg & IPC_CREAT) is ``true''.
Upon creation, the data structure associated with the new semaphore
identifier is initialized as follows:
o sem_perm.cuid, sem_perm.uid, sem_perm.cgid, and sem_perm.gid are set
equal to the effective user ID and effective group ID, respectively,
of the calling process.
o The low-order 9 bits of sem_perm.mode are set equal to the low-order
9 bits of semflg.
o sem_nsems is set equal to the value of nsems.
o sem_otime is set equal to 0 and sem_ctime is set equal to the cur-
A semaphore identifier (semid) is a unique positive integer created by
a semget(2) system call. Each semid has a set of semaphores and a data
structure associated with it. The data structure is referred to as
semid_ds and contains the following members:
struct ipc_perm sem_perm; /* operation permission struct */
ushort sem_nsems; /* number of sems in set */
time_t sem_otime; /* last operation time */
time_t sem_ctime; /* last change time */
/* Times measured in secs since */
/* 00:00:00 GMT, Jan. 1, 1970 */
sem_perm is an ipc_perm structure that specifies the semaphore opera-
tion permission (see below). This structure includes the following
ushort cuid; /* creator user id */
ushort cgid; /* creator group id */
ushort uid; /* user id */
ushort gid; /* group id */
ushort mode; /* r/a permission */
The value of sem_nsems is equal to the number of semaphores in the set.
Each semaphore in the set is referenced by a positive integer referred
to as a sem_num. sem_num values run sequentially from 0 to the value
of sem_nsems minus 1. sem_otime is the time of the last semop(2) oper-
ation, and sem_ctime is the time of the last semctl(2) operation that
changed a member of the above structure.
A semaphore is a data structure that contains the following members:
ushort semval; /* semaphore value */
short sempid; /* pid of last operation */
ushort semncnt; /* # awaiting semval >> cval */
ushort semzcnt; /* # awaiting semval = 0 */
semval is a non-negative integer. sempid is equal to the process ID of
the last process that performed a semaphore operation on this sema-
phore. semncnt is a count of the number of processes that are cur-
rently suspended awaiting this semaphore's semval to become greater
than its current value. semzcnt is a count of the number of processes
that are currently suspended awaiting this semaphore's semval to become
semget() returns a non-negative semaphore identifier on success. On
failure, it returns -1 and sets errno to indicate the error.
EACCES A semaphore identifier exists for key, but operation
permission (see intro(2)) as specified by the low-order
9 bits of semflg would not be granted.
EEXIST A semaphore identifier exists for key but ( (semflg &
IPC_CREAT) and (semflg & IPC_EXCL)) is ``true''.
EINVAL nsems is either less than or equal to zero or greater
than the system-imposed limit.
A semaphore identifier exists for key, but the number of
semaphores in the set associated with it is less than
nsems and nsems is not equal to zero.
ENOENT A semaphore identifier does not exist for key and (sem-
flg & IPC_CREAT) is ``false''.
ENOSPC A semaphore identifier is to be created but the system-
imposed limit on the maximum number of allowed semaphore
identifiers system wide would be exceeded.
A semaphore identifier is to be created but the system-
imposed limit on the maximum number of allowed sema-
phores system wide would be exceeded.
ipcrm(1), ipcs(1), intro(2), semctl(2), semop(2)
21 January 1990 SEMGET(2)