Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       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 のラッパー関数はカーネル バージョンによるこの違いを吸収している。

関連項目

       getgid(2), setgid(2), getgrouplist(3),  group_member(3),  initgroups(3),  capabilities(7),
       credentials(7)

この文書について

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