---
name: "semget"
section: "2freebsd"
platform: "linux"
package: "freebsd-manpages"
version: "12.2-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/semget/2freebsd"
---

# semget(2freebsd)

obtain a semaphore id

## NAME

**semget** – obtain a semaphore id

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<sys/sem.h\>**

*int*\

**semget**(*key\_t key*, *int nsems*, *int flag*);

## DESCRIPTION

Based on the values of *key* and *flag*, **semget**() returns the identifier of a newly created or previously existing set of semaphores. The key is analogous to a filename: it provides a handle that names an IPC object. There are three ways to specify a key:

- IPC\_PRIVATE may be specified, in which case a new IPC object will be created.

- An integer constant may be specified. If no IPC object corresponding to *key* is specified and the IPC\_CREAT bit is set in *flag*, a new one will be created.

- The [ftok(3)](/ftok/3.md) function may be used to generate a key from a pathname.

The mode of a newly created IPC object is determined by ORing these constants into the *flag* argument:

- 0400

  Read access for user.

- 0200

  Alter access for user.

- 0040

  Read access for group.

- 0020

  Alter access for group.

- 0004

  Read access for other.

- 0002

  Alter access for other.

If a new set of semaphores is being created, *nsems* is used to indicate the number of semaphores the set should contain. Otherwise, *nsems* may be specified as 0.

## RETURN VALUES

The **semget**() system call returns the id of a semaphore set if successful; otherwise, -1 is returned and *errno* is set to indicate the error.

## ERRORS

The **semget**() system call will fail if:

- \[EACCES\]

  Access permission failure.

- \[EEXIST\]

  IPC\_CREAT and IPC\_EXCL were specified, and a semaphore set corresponding to *key* already exists.

- \[EINVAL\]

  The number of semaphores requested exceeds the system imposed maximum per set.

- \[EINVAL\]

  A semaphore set corresponding to *key* already exists and contains fewer semaphores than *nsems*.

- \[EINVAL\]

  A semaphore set corresponding to *key* does not exist and *nsems* is 0 or negative.

- \[ENOSPC\]

  Insufficiently many semaphores are available.

- \[ENOSPC\]

  The kernel could not allocate a *struct semid\_ds*.

- \[ENOENT\]

  No semaphore set was found corresponding to *key*, and IPC\_CREAT was not specified.

## SEE ALSO

[semctl(2)](/semctl/2.md), [semop(2)](/semop/2.md), [ftok(3)](/ftok/3.md)
