---
name: "setgroups"
section: "2"
platform: "macos"
package: "xnu"
version: "12377.121.6"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/setgroups"
---

# setgroups(2)

set group access list

## NAME

**setgroups** – set group access list

## SYNOPSIS

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

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

*int*\

**setgroups**(*int ngroups*, *const gid\_t \*gidset*);

## DESCRIPTION

**setgroups**() sets the group access list of the current user process according to the array  *gidset*. The parameter *ngroups* indicates the number of entries in the array and must be no more than {NGROUPS\_MAX}.

Only the super-user may set new groups.

Use of **setgroups**() is highly discouraged.

## RETURN VALUES

A 0 value is returned on success, -1 on error, with an error code stored in *errno*.

## ERRORS

The **setgroups**() call will fail if:

- \[EINVAL\]

  The value of  *ngroups* is greater than {NGROUPS\_MAX}.

- \[EPERM\]

  The caller is not the super-user.

- \[EFAULT\]

  The address specified for *gidset* is outside the process address space.

## SEE ALSO

[getgroups(2)](/getgroups/2.md), [initgroups(3)](/initgroups/3.md)

## HISTORY

The **setgroups**() function call appeared in 4.2BSD.
