January 22, 2003 SEM_INIT 3

### NAME

sem_init - initialize an unnamed semaphore

### LIBRARY

POSIX Real-time Library (librt, -lrt)

### SYNOPSIS

```int` sem_init(```sem_t *sem``, int pshared``, unsigned int value`)

### DESCRIPTION

The sem_init(``) function initializes the unnamed semaphore pointed to by ```sem` to have the value ```value`. A non-zero value for ```pshared` specifies a shared semaphore that can be used by multiple processes, which this implementation is not capable of.

Following a successful call to sem_init(``), ```sem` can be used as an argument in subsequent calls to ```sem_wait`, ```sem_trywait`, ```sem_post`, and ```sem_destroy`. ```sem` is no longer valid after a successful call to ```sem_destroy`.

### RETURN VALUES

### ERRORS

sem_init(``) will fail if:

[```EINVAL`]
  ```value` exceeds SEM_VALUE_MAX.

[```ENOSPC`]
  Memory allocation error.

[```EPERM`]
  Unable to initialize a shared semaphore.

### SEE ALSO

sem_destroy(3), sem_post(3), sem_trywait(3), sem_wait(3)

### STANDARDS

sem_init(``) conforms to ISO/IEC 9945-1:1996 (``POSIX.1'') .

This implementation does not support shared semaphores, and reports this fact by setting errno to ```EPERM`. This is perhaps a stretch of the intention of POSIX, but is compliant, with the caveat that sem_init(``) always reports a permissions error when an attempt to create a shared semaphore is made.