Next: Floating Type Macros, Previous: Width of Type, Up: Data Type Measurements
Suppose you need to store an integer value which can range from zero to
one million. Which is the smallest type s used to inquire about the supplementary
group IDs of the process. Up to count of these group IDs are
stored in the array groups; the return value from the function is
the number of group IDs actually stored. If count is smaller than
the total number of supplementary group IDs, then getgroups
returns a value of -1 and errno is set to EINVAL.
If count is zero, then getgroups just returns the total
number of supplementary group IDs. On systems that do not support
supplementary groups, this will always be zero.
Here's how to use getgroups to read all the supplementary group
IDs:
gid_t *
read_all_groups (void)
{
int ngroups = getgroups (0, NULL);
gid_t *groups
= (gid_t *) xmalloc (ngroups * sizeof (gid_t));
int val = getgroups (ngroups, groups);
if (val < 0)
{
free (groups);
return NULL;
}
return groups;
}