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.
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