Content-type: text/html Man page of sem_open


Section: C Library Functions (3)
Index Return to Main Contents


sem_open - Opens/creates a named semaphore for use by a process (P1003.1b)  


#include <semaphore.h>

sem_t *sem_open (
const char *name,
int oflag, ...);  


Points to the string naming the semaphore object.
Controls whether the semaphore is created or only accessed by the call to sem_open. The O_CREAT and O_EXCL flag bits may be set in oflag.


Use the sem_open function to establish the connection between a named semaphore and a process. Subsequently, the calling process can reference the semaphore by using the address returned from the call. The semaphore is available in subsequent calls to sem_wait, sem_trywait, sem_post, and sem_getvalue functions. The semaphore remains usable by the process until the semaphore is closed by a successful call to the sem_close function.

The oflag flag controls whether the semaphore is created or only accessed by the call to sem_open. The O_CREAT and O_EXCL flag bits may be set in oflag as follows:

This flag is used to create a semaphore if it does not already exist. The O_CREAT argument requires additional arguments: mode of type mode_t, and value of type unsigned int. After the semaphore is created, other processes can open the semaphore by calling sem_open with the same value for the name argument.

The semaphore's user ID is set to the user ID of the process and the semaphore's group ID is set to a system default group or to the group ID of the process. The semaphore's permission bits shall be set to the value of the mode argument, except for those set in the file mode creation mask of the process.

If O_EXCL and O_CREAT are set, sem_open will fail if a semaphore of the same name already exists.


On successful completion, this function opens the semaphore and returns the semaphore's descriptor. Otherwise, the function returns -1 and sets errno to indicate the error.  


The sem_open function fails under the following conditions:

The named semaphore exists and the permissions specified by oflag are denied, or the namedsemaphore does not exist and the permissions specified by oflag are denied.
O_CREAT and O_EXCL are set and the named semaphore already exists.
The sem_open operation was interrupted by a signal.
The sem_open operation is not supported for the given name. Or, O_CREAT was specified in oflag and value wa greater than {SEM_VALUE_MAX}.
Too many semaphore descriptors or file descriptors are currently in use by this process.
The length of the name string exceeds {PATH_MAX}, or a pathname component is longer than {NAME_MAX} while {_POSIX_NO_TRUNC} is in effect.
Too many semaphores are currently open in the system.
O_CREAT is not set and the named semaphore does not exist.
There is insufficient space for the creation of the new named semaphore.


Functions: sem_close(3), sem_post(3), sem_trywait(3), sem_unlink(3), sem_wait(3) delim off




This document was created by man2html, using the manual pages.
Time: 02:41:19 GMT, October 02, 2010