NAME
semget — get set of semaphores
SYNOPSIS
#include <sys/sem.h>
int semget(key_t key, int nsems, int semflg);
DESCRIPTION
semget()
returns the semaphore identifier associated with
key.
A semaphore identifier and associated data structure and set containing
nsems
semaphores are created for
key
if one of the following is true:
key
is equal to
IPC_PRIVATE.
This call creates a new identifier, subject to available resources.
The identifier is never returned by another call to
semget()
until it has been released by a call to
semctl().
The identifier should be used among the calling process
and its descendents; however, it is not a requirement.
The resource can be accessed by any process having the proper permissions.
key
does not already have a semaphore identifier associated with it, and
(semflg
&
IPC_CREAT)
is "true".
Specific behavior can be requested by
ORing
the following masks into
semflg.
IPC_CREAT:
Create a semaphore identifier if one does not already exist for
key.
IPC_EXCL:
If
IPC_CREAT
is specified and
key
already has a semaphore identifier associated with it, return an error.
The low-order 9 bits of
semflg
are the semaphore operation permissions which are defined in
glossary(9).
Upon creation, the data structure
associated with the new semaphore identifier is initialized as follows:
In the operation-permission structure,
sem_perm.cuid
and
sem_perm.uid
are set equal to the effective-user-ID of the calling process,
while
sem_perm.cgid
and
sem_perm.gid
are set to the effective-group-ID of the calling process.
The low-order 9 bits of
sem_perm.mode
are set equal to the low-order 9 bits of
semflg.
sem_nsems
is set equal to the value of
nsems.
sem_otime
is set equal to 0 and
sem_ctime
is set equal to the current time.
Security Restrictions
Some or all of the actions associated with this system call are subject to
compartmental restrictions. See
compartments(5)
for more information about compartmentalization on systems that support
that feature.
Compartmental restrictions can be overridden if the process possesses the
COMMALLOWED
privilege (PRIV_COMMALLOWED).
Processes owned by the superuser may not have this privilege.
Processes owned by any user may have this privilege, depending on system
configuration.
See
privileges(5)
for more information about privileged access on
systems that support fine-grained privileges.
EXAMPLES
The following call to
semget()
returns a semid associated with the key returned by
ftok("myfile", 'A').
If a semid associated with the key does not exist,
a new semid, set of 4 semaphores,
and associated data structure will be created.
If a semid for the key already exists, the semid is simply
returned.
int semid;
mysemid = semget (ftok("myfile",'A'), 4, IPC_CREAT | 0600);
RETURN VALUE
Upon successful completion, a non-negative integer,
namely a semaphore identifier, is returned.
Otherwise, a value of -1 is returned and
errno
is set to indicate the error.
ERRORS
semget()
fails if one or more of the following is true:
- EINVAL
nsems
is either less than or equal to zero
or greater than the system-imposed limit.
- EACCES
A semaphore identifier exists for
key,
but operation permission as specified by the low-order 9 bits of
semflg
would not be granted.
- EINVAL
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
(semflg
&
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.
- EEXIST
A semaphore identifier exists for
key
but
((semflg& IPC_CREAT) && (semflg & IPC_EXCL))
is "true".
STANDARDS CONFORMANCE
semget(): SVID2, SVID3, XPG2, XPG3, XPG4