Originální popis anglicky: 
getgrouplist - list of groups a user belongs to
Návod, kniha: Linux Programmer's Manual
#include <grp.h>
 
int getgrouplist (const char *user, gid_t
  group,
gid_t *groups, int *ngroups);
The 
getgrouplist() function scans the group database for all the groups
  
user belongs to. Up to *
ngroups group IDs corresponding to these
  groups are stored in the array 
groups; the return value from the
  function is the number of group IDs actually stored. The group 
group is
  automatically included in the list of groups returned by
  
getgrouplist().
If *
ngroups is smaller than the total number of groups found, then
  
getgrouplist() returns a value of `-1'. In all cases the actual number
  of groups is stored in *
ngroups.
The glibc 2.3.2 implementation of this function is broken: it overwrites memory
  when the actual number of groups is larger than *
ngroups.
This function is present since glibc 2.2.4.
/* This crashes with glibc 2.3.2 */
#include <stdio.h>
#include <stdlib.h>
#include <grp.h>
#include <pwd.h>
int main() {
        int i, ng = 0;
        char *user = "who";	/* username here */
        gid_t *groups = NULL;
        struct passwd *pw = getpwnam(user);
        if (pw == NULL)
                return 0;
        if (getgrouplist(user, pw->pw_gid, NULL, &ng) < 0) {
                groups = (gid_t *) malloc(ng * sizeof (gid_t));
                getgrouplist(user, pw->pw_gid, groups, &ng);
        }
        for(i = 0; i < ng; i++)
                printf("%d\n", groups[i]);
        return 0;
}
getgroups(3), 
setgroups(3)