Linux repositories inspector
Linux
2014-08-19
Aliases: getgroups32(2), getgroups32(2), getgroups32(2), getgroups32(2), getgroups32(2), getgroups32(2), getgroups32(2), getgroups32(2), getgroups32(2), getgroups32(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups(2), setgroups32(2), setgroups32(2), setgroups32(2)

manpages-ja-dev

Japanese version of the manual pages (for developers)

man-pages-ja

Japanese man (manual) pages from the Japanese Manual Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

名前

getgroups, setgroups - 補助グループ ID のリストを取得/設定する

書式

#include <sys/types.h>
#include <unistd.h>
int getgroups(int size, gid_t list[]);
#include <grp.h>
int setgroups(size_t size, const gid_t *list);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
setgroups(): _BSD_SOURCE

説明

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 の数を指定する。

返り値

getgroups() は、成功すると補助グループ ID の数を返す。 エラーの場合 -1 を返し、 errno を適切に設定する。
setgroups() は、成功すると 0 を返す。 エラーの場合 -1 を返し、 errno を適切に設定する。

エラー

EFAULT list が不正なアドレスである。
getgroups() は、上記に加えて以下のエラーで失敗する可能性がある。
EINVAL size が補助グループ ID の数より小さいが 0 でない。
setgroups() は、上記に加えて以下のエラーで失敗する可能性がある。
EINVAL sizeNGROUPS_MAX より大きい (NGROUPS_MAX は Linux 2.6.4 より前では 32、Linux 2.6.4 以降では 65536)。
ENOMEM メモリー不足。
EPERM 呼び出し元プロセスが十分な特権を持っていない。

準拠

SVr4, 4.3BSD. getgroups() 関数は POSIX.1-2001 に準拠している。 setgroups() は特権を必要とするため、POSIX.1-2001 に従っていない。

注意

プロセスは、実効グループ ID に加え、最大 NGROUPS_MAX までの補助グループ ID を持つことができる。 定数 NGROUPS_MAX<limits.h> で定義されている。 補助グループ ID の集合は親プロセスから継承され、 execve(2) の前後で保持される。
補助グループ ID の最大数は、実行時に sysconf(3) を使って以下のようにして調べることができる:

long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX);
getgroups() の返り値の最大値は、この値より大きくなることはない。 Linux 2.6.4 以降では、補助グループ ID の最大数も Linux 固有の読み込み専用のファイル /proc/sys/kernel/ngroups_max 経由で公開されている。
元々の Linux の getgroups() システムコールは 16 ビットのグループ ID だけ に対応していた。その後、Linux 2.4 で、32 ビットの ID に対応した getgroups() が追加された。glibc の getgroups のラッパー関数はカーネル バージョンによるこの違いを吸収している。

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
⇧ Top