---
name: "sem_getvalue"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/sem_getvalue"
---

# sem\_getvalue(3)

get the value of a semaphore

## NAME

sem\_getvalue - get the value of a semaphore

## LIBRARY

POSIX threads library (*libpthread*, *-lpthread*)

## SYNOPSIS

```
#include <semaphore.h>
```

**int sem\_getvalue(sem\_t \*restrict** *sem***, int \*restrict** *sval***);**

## DESCRIPTION

**sem\_getvalue**() places the current value of the semaphore pointed to *sem* into the integer pointed to by *sval*.

If one or more processes or threads are blocked waiting to lock the semaphore with [**sem\_wait**(3)](/sem_wait/3.md), POSIX.1 permits two possibilities for the value returned in *sval*: either 0 is returned; or a negative number whose absolute value is the count of the number of processes and threads currently blocked in [**sem\_wait**(3)](/sem_wait/3.md). Linux adopts the former behavior.

## RETURN VALUE

**sem\_getvalue**() returns 0 on success; on error, -1 is returned and *errno* is set to indicate the error.

## ERRORS

- **EINVAL**

  *sem* is not a valid semaphore. (The glibc implementation currently does not check whether *sem* is valid.)

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **sem\_getvalue**() | Thread safety | MT-Safe |

## STANDARDS

POSIX.1-2008.

## HISTORY

POSIX.1-2001.

## NOTES

The value of the semaphore may already have changed by the time **sem\_getvalue**() returns.

## SEE ALSO

[**sem\_post**(3)](/sem_post/3.md), [**sem\_wait**(3)](/sem_wait/3.md), [**sem\_overview**(7)](/sem_overview/7.md)
