int getgroups(int size, gid_t list[]);
#include <grp.h>
int setgroups(size_t size, const gid_t *list);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
getgroups() は呼び出し元プロセスの補助グループ (supplementary group) ID を list に返す。 size 引き数には、 list により参照されるバッファに格納できる要素の最大数を設定すべきである。 呼び出し元プロセスが size 個より多くの補助グループのメンバの場合には、エラーとなる。 この関数を呼び出したプロセスの実効グループ ID が、 返されるリストに含まれるかどうかは規定されていない (したがって、アプリケーションは getegid(2) を呼び出し、その結果の値を追加・削除すべきである)。
size が 0 ならば、 list は修正されないが、そのプロセスの補助グループ ID の合計数が返される。 これを使うことで、それ以降の getgroups() の呼び出しで必要となる動的割り当てバッファ list のサイズを、呼び出し元が決定することができる。
setgroups() は、呼び出し元プロセスの補助グループ ID を設定する。 適切な特権 (Linux では CAP_SETGID ケーパビリティ (capability)) が必要である。 size 引き数には、 list により参照されるバッファに格納された補助グループ ID の数を指定する。
setgroups() は、成功すると 0 を返す。 エラーの場合 -1 を返し、 errno を適切に設定する。
getgroups() は、上記に加えて以下のエラーで失敗する可能性がある。
setgroups() は、上記に加えて以下のエラーで失敗する可能性がある。
補助グループ ID の最大数は sysconf(3) を使って以下のようにして調べることができる:
long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX);getgroups() の返り値の最大値は、この値より 1 大きい値より大きくなることはない。