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

# getgroups(2freebsd)

get group access list

## NAME

**getgroups** – get group access list

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

**getgroups**(*int gidsetlen*, *gid\_t \*gidset*);

## DESCRIPTION

The **getgroups**() system call gets the current group access list of the user process and stores it in the array *gidset*. The *gidsetlen* argument indicates the number of entries that may be placed in *gidset*. The **getgroups**() system call returns the actual number of groups returned in *gidset*. At least one and as many as {NGROUPS\_MAX}+1 values may be returned. If *gidsetlen* is zero, **getgroups**() returns the number of supplementary group IDs associated with the calling process without modifying the array pointed to by *gidset*.

The value of {NGROUPS\_MAX} should be obtained using [sysconf(3)](/sysconf/3.md) to avoid hard-coding it into the executable.

## RETURN VALUES

A successful call returns the number of groups in the group set. A value of -1 indicates that an error occurred, and the error code is stored in the global variable *errno*.

## ERRORS

The possible errors for **getgroups**() are:

- \[EINVAL\]

  The argument *gidsetlen* is smaller than the number of groups in the group set.

- \[EFAULT\]

  The argument *gidset* specifies an invalid address.

## SEE ALSO

[setgroups(2)](/setgroups/2.md), [initgroups(3)](/initgroups/3.md), [sysconf(3)](/sysconf/3.md)

## STANDARDS

The **getgroups**() system call conforms to IEEE Std 1003.1-2008 (“POSIX.1”).

## HISTORY

The **getgroups**() system call appeared in 4.2BSD.
