semget - Return (and possibly create) a semaphore ID
#include <sys/sem.h>
int semget(
key_t key,
int nsems,
int semflg );
Application developers may want to specify #include statements
for <sys/types.h> and <sys/ipc.h> before the one for
<sys/sem.h> if programs are being developed for multiple
platforms. The additional #include statements are not
required on Tru64 UNIX systems or by ISO or XSH specifications,
but may be required on other vendors' systems that
conform to these standards.
Interfaces documented on this reference page conform to
industry standards as follows:
semget(): XPG4, XSH4.2, XSH5.0
Refer to the standards(5) reference page for more information
about industry standards and associated tags.
Specifies the key that identifies the semaphore set. The
value for the key parameter can be IPC_PRIVATE or a random
number other than 0 (zero). To ensure that you receive a
new, unused entry in the semaphore table, specify IPC_PRIVATE
as the value of key. Specifies the number of
semaphores to create in the semaphore set. Specifies the
creation options. Possible values are as follows: If the
key specified does not exist, the semget() function creates
a semaphore ID using the specified key.
If the specified key exists, and IPC_EXCL is not
set, the semaphore id for the specified key is
returned.
If the specified key exists and IPC_EXCL is set,
the semget() function fails and returns an error.
Specifies that you want exclusive access to the
semaphore set.
If the specified key already exists, the semget()
function fails and returns an error notification.
The system defines sets of semaphores in a system-wide
table, with each set being an entry in the table. The
semget() function returns an ID that identifies the
semaphore set's entry in the table. You determine which
semaphore set's ID is returned by specifying the key
parameter.
The semget() function creates a semaphore set containing
nsems semaphores and returns its ID in the following situations:
The key parameter is IPC_PRIVATE. The key
parameter does not already exist as an entry in the
semaphore table and the IPC_CREAT option is set.
To create a semaphore set, the semget() function creates
and initializes a structure of type semid_ds, which is
defined as follows:
struct semid_ds {
struct ipc_perm sem_perm;
struct sem *sem_base;
ushort_t sem_nsems;
time_t sem_otime;
time_t sem_ctime; };
For a complete description of this structure, see
semid_ds(4). The semget() function initializes the structure
as follows: The sem_perm.cuid and sem_perm.uid fields
are set equal to the effective user ID of the calling process.
The sem_perm.cgid and sem_perm.gid fields are set
equal to the effective group ID of the calling process.
The low-order nine bits of sem_perm.mode are set equal to
the low-order nine bits of semflg. The sem_nsems field is
set equal to the value of nsems. The sem_otime field is
set equal to zero (0) and the sem_ctime field is set equal
to the current time.
The individual semaphores within a set are implemented
using the sem structure. (For more information about this
structure, see the <sys/sem.h> header file.) The semget()
function does not initialize the sem structure associated
with each semaphore in the set. The individual semaphores
are initialized when you call the semctl() function with
the SETVAL or SETALL request.
The librt library contains alternative interfaces for
interprocess communication. The names of these routines
adhere to the format sem_* and their reference pages are
listed in SEE ALSO.
Upon successful completion, the semget() function returns
a semaphore identifier. If the semget() function fails, it
returns a value of -1 and sets errno to indicate the
error.
The semget() function sets errno to the specified values
for the following conditions: A semaphore ID already
exists for the key parameter, but operation permission as
specified by the low-order nine bits of the semflg parameter
was not granted. A semaphore ID already exists for
the key parameter, but IPC_CREAT and IPC_EXCL were used
for the semflg parameter. The value of the nsems parameter
is less than or equal to 0 (zero) or greater than the
system-defined limit. Or, a semaphore ID already exists
for the key parameter, but the number of semaphores in the
set is less than the nsems parameter, and the nsems parameter
is not equal to 0 (zero). A semaphore ID does not
exist for the key parameter and IPC_CREAT was not set. An
attempt to create a new semaphore ID exceeded the systemwide
limit on the size of the semaphore table.
Functions: semctl(2), semop(2), table(2), ftok(3),
sem_close(3), sem_destroy(3), sem_getvalue(3),
sem_init(3), sem_open(3), sem_post(3), sem_unlink(3),
sem_wait(3)
Files: semid_ds(4), sysconfigtab(4)
Standards: standards(5)
semget(2)
[ Back ] |