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

# initgroups(3)

initialize the supplementary group access list

## NAME

initgroups - initialize the supplementary group access list

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <sys/types.h>
#include <grp.h>
```

**int initgroups(const char \****user***, gid\_t** *group***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**initgroups**():

```
    Since glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 and earlier:
        _BSD_SOURCE
```

## DESCRIPTION

The **initgroups**() function initializes the group access list by reading the group database */etc/group* and using all groups of which *user* is a member. The additional group *group* is also added to the list.

The *user* argument must be non-NULL.

## RETURN VALUE

The **initgroups**() function returns 0 on success. On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **ENOMEM**

  Insufficient memory to allocate group information structure.

- **EPERM**

  The calling process has insufficient privilege. See the underlying system call [**setgroups**(2)](/setgroups/2.md).

## FILES

- */etc/group*

  group database file

## ATTRIBUTES

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

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **initgroups**() | Thread safety | MT-Safe locale |

## STANDARDS

None.

## HISTORY

SVr4, 4.3BSD.

## SEE ALSO

[**getgroups**(2)](/getgroups/2.md), [**setgroups**(2)](/setgroups/2.md), [**credentials**(7)](/credentials/7.md)
