GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
* Sign Up! *

Support
Customer Portal
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
GETGROUPS(2) FreeBSD System Calls Manual GETGROUPS(2)

getgroupsget the calling process' supplementary groups

Standard C Library (libc, -lc)

#include <unistd.h>

int
getgroups(int gidsetlen, gid_t *gidset);

The () system call gets the calling process' supplementary groups and stores them in the gidset array in strictly ascending order. The value of gidsetlen indicates the maximum number of entries that may be placed in gidset.

If gidsetlen is zero, () returns the cardinal of the calling process' supplementary groups set and ignores argument gidset.

No more than {NGROUPS_MAX} values may ever be returned. The value of {NGROUPS_MAX} should be obtained using sysconf(3) to avoid hard-coding it into the executable.

On success, the getgroups() system call returns the cardinal of the supplementary groups set. It always succeeds if argument gidsetlen is zero.

A value of -1 indicates that an error occurred, and the error code is stored in the global variable errno.

The possible errors for getgroups() are:

[]
The argument gidsetlen is smaller than the number of supplementary groups (but not zero).
[]
An invalid address was encountered while reading from the gidset array.

The getgroups() system call conforms to IEEE Std 1003.1-2008 (“POSIX.1”), not reporting the effective group ID.

The getgroups() system call appeared in 4.2BSD.

Since FreeBSD 14.3, the getgroups() system call has been reporting the supplementary groups in strictly ascending order.

Before FreeBSD 15.0, the getgroups() system call would additionally return the effective group ID as the first element of the array, before the supplementary groups.

The getgroups() system call gets the supplementary groups set in the gidset array. In particular, as evoked in HISTORY, it does not anymore retrieve the effective group ID in the first slot of gidset. Programs that process this slot in a specific way must be modified to obtain the effective group ID through other means, such as a call to getegid(2).

The effective group ID is present in the supplementary groups set if and only if it was explicitly set as a supplementary group. The function initgroups() enforces that, while the setgroups() system call does not. Please consult the initgroups(3) manual page for the rationale.

October 10, 2025 FreeBSD 15.1-RELEASE-p1

Search for    or go to Top of page |  Section 2 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.