#include <sys/sem.h> #include <sys/stat.h> int semget(key_t key, int nsems, int semflg);
The semget() function either creates a new semaphore set or returns the semaphore set identifier associated with the key parameter for an existing semaphore set. A new semaphore set is created if one of the following is true:
The system maintains status information about a semaphore set which can be retrieved with the semctl() function. When a new semaphore set is created, the system initializes the members of the semid_ds structure as follows:
Parameters
Authorization Required for semget()
Object Referred to | Authority Required | errno |
---|---|---|
Semaphore set to be created | None | None |
Existing semaphore set to be accessed | See Note | EACCES |
Note: If the thread is accessing a semaphore set that already exists, the mode specified in the last 9 bits of semflg must be a subset of the mode of the existing semaphore set.
value | semget() was successful. The value returned is the semaphore set identifier associated with the key parameter. |
-1 | semget() was not successful. The errno variable is set to indicate the error. |
If semget() is not successful, errno usually indicates one of the following errors. Under some conditions, errno could indicate an error other than those listed here.
Permission denied.
An attempt was made to access an object in a way forbidden by its object access permissions.
The thread does not have access to the specified file, directory, component, or path.
A semaphore set identifier exists for the parameter key, but permissions specified in the low-order 9 bits of semflg are not a subset of the current permissions.
A damaged object was encountered.
A referenced object is damaged. The object cannot be used.
The semaphore set has been damaged by a previous semaphore operation.
File exists.
The file specified already exists and the specified operation requires that it not exist.
The named file, directory, or path already exists.
A semaphore identifier exists for the key parameter, and both the IPC_CREAT and IPC_EXCL flags are set in the semflg parameter.
The value specified for the argument is not correct.
A function was passed incorrect argument values, or an operation was attempted on an object and the operation specified is not supported for that type of object.
An argument value is not valid, out of range, or NULL.
One of the following has occurred:
No such path or directory.
The directory or a component of the path name specified does not exist.
A named file or directory does not exist or is an empty string.
A semaphore set identifier does not exist for the key parameter, and the IPC_CREAT flag is not set in the semflg parameter.
No space available.
The requested operations required additional space on the device and there is no space left. This could also be caused by exceeding the user profile storage limit when creating or transferring ownership of an object.
Insufficient space remains to hold the intended file, directory, or link.
A semaphore set identifier cannot be created because the system limit on the maximum number of allowed semaphore set identifiers would be exceeded.
Unknown system state.
The operation failed because of an unknown system state. See any messages in the job log and correct any errors that are indicated, then retry the operation.
None.
See Code disclaimer information for information pertaining to code examples.
For an example of using this function, see Using Semaphores and Shared Memory in Examples: APIs.
Top | UNIX-Type APIs | APIs by category |