---
name: "sem_getvalue"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
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

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<semaphore.h\>**

*int*\

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

## DESCRIPTION

The **sem\_getvalue**() function sets the variable pointed to by *sval* to the current value of the semaphore pointed to by *sem*, as of the time that the call to **sem\_getvalue**() is actually run.

## RETURN VALUES

The **sem\_getvalue()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The **sem\_getvalue**() function will fail if:

- \[EINVAL\]

  The *sem* argument points to an invalid semaphore.

## SEE ALSO

[sem\_post(3)](/sem_post/3.md), [sem\_trywait(3)](/sem_trywait/3.md), [sem\_wait(3)](/sem_wait/3.md)

## STANDARDS

The **sem\_getvalue**() function conforms to ISO/IEC 9945-1:1996 (“POSIX.1”).

The value of the semaphore is never negative, even if there are threads blocked on the semaphore. POSIX is somewhat ambiguous in its wording with regard to what the value of the semaphore should be if there are blocked waiting threads, but this behavior is conformant, given the wording of the specification.
