SEM_OPEN (3) | C library functions | Unix Manual Pages | :man▋
sem_open, sem_close, sem_unlink - named semaphore operations
.In semaphore.h "sem_t *" sem_open "const char *name" "int oflag" ... int sem_close "sem_t *sem" int sem_unlink "const char *name"
The sem_open function creates or opens the named semaphore specified by name. The returned semaphore may be used in subsequent calls to sem_getvalue(3), sem_wait(3), sem_trywait(3), sem_post(3), and sem_close.
The following bits may be set in the oflag argument:
| O_CREAT || Create the semaphore if it does not already exist. |
The third argument to the call to sem_open must be of type
.Vt mode_t and specifies the mode for the semaphore. Only the S_IWUSR, S_IWGRP, and S_IWOTH bits are examined; it is not possible to grant only "read" permission on a semaphore. The mode is modified according to the processs file creation mask; see umask(2).
The fourth argument must be an
.Vt "unsigned int" and specifies the initial value for the semaphore, and must be no greater than SEM_VALUE_MAX.
| O_EXCL || Create the semaphore if it does not exist. If the semaphore already exists, sem_open will fail. This flag is ignored unless O_CREAT is also specified. |
The sem_close function closes a named semaphore that was opened by a call to sem_open.
The sem_unlink function removes the semaphore named name. Resources allocated to the semaphore are only deallocated when all processes that have the semaphore open close it.
If successful, the sem_open function returns the address of the opened semaphore. If the same name argument is given to multiple calls to sem_open by the same process without an intervening call to sem_close, the same address is returned each time. If the semaphore cannot be opened, sem_open returns SEM_FAILED and the global variable errno is set to indicate the error.
.Rv -std sem_close sem_unlink
The sem_open function will fail if:
| || The semaphore exists and the permissions specified by oflag at the time it was created deny access to this process. |
| || The semaphore does not exist, but permission to create it is denied. |
| || O_CREAT and O_EXCL are set but the semaphore already exists. |
| || The call was interrupted by a signal. |
| || The sem_open operation is not supported for the given name. |
| || The value argument is greater than SEM_VALUE_MAX. |
| || The name argument is too long. |
| || The system limit on semaphores has been reached. |
| || O_CREAT is set but the named semaphore does not exist. |
| || There is not enough space to create the semaphore. |
The sem_close function will fail if:
| || The sem argument is not a valid semaphore. |
The sem_unlink function will fail if:
| || Permission is denied to unlink the semaphore. |
| || The specified name is too long. |
| || The named semaphore does not exist. |
close(2), open(2), umask(2), unlink(2), sem_getvalue(3), sem_post(3), sem_trywait(3), sem_wait(3), sem(4)
Share this page