getgroups()

Get the supplementary group IDs of the calling process

Synopsis:

#include <unistd.h>

int getgroups( int gidsetsize, 
               gid_t grouplist[] );

Arguments:

gidsetsize
The size of the grouplist array, or 0 if you want to get the number of supplementary group IDs.
grouplist
An array that the function can fill in with the process's supplementary group IDs.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The getgroups() function fills the array grouplist with the supplementary group IDs of the calling process. The maximum number of group IDs is given by sysconf(_SC_NGROUPS_MAX). The values of array entries with indices greater than or equal to the returned value are undefined.

If gidsetsize is 0, the function returns the number of group IDs, without modifying the grouplist array.

Returns:

The number of supplementary groups IDs, or -1 if an error occurred (errno is set).

Errors:

EINVAL
The gidsetsize argument isn't equal to zero, and is less than the number of supplementary group IDs.

Examples:

/*
 * Print the supplementary group IDs of
 * the calling process.
 */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main( void )
  {
    int     gidsize;
    gid_t   *grouplist;
    int     i;

    gidsize = getgroups( 0, NULL );
    grouplist = malloc( gidsize * sizeof( gid_t ) );
    getgroups( gidsize, grouplist );
    for( i = 0; i < gidsize; i++ )
      printf( "%d\n", ( int ) grouplist[i] );
    return EXIT_SUCCESS;
  }

Classification:

POSIX 1003.1

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes