getgroups - システムコールの説明 - Linux コマンド集 一覧表
名前
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
);
書式
- getgroups ()
- (呼び出し元プロセスの) 最大 size までの補助グループ (supplementary group) ID を list に返す。 この関数を呼び出したプロセスの実効グループ ID が、 返されるリストに含まれるかどうかは指定されていない (つまり、アプリケーションは getegid (2)を呼び出し、その結果の値を追加・削除すべきである)。 size が 0 ならば、 list は修正されないが、そのプロセスの補助グループ ID の合計数が返される。
- setgroups ()
- そのプロセスに補助グループ ID を設定する。 適切な特権 (Linux では CAP_SETGID ケーパビリティ (capability)) が必要である。
返り値
- getgroups ()
- 成功した場合は、補助グループ ID の数を返す。 エラーの場合は -1 を返し errno が適切に設定される。
- setgroups ()
- 成功した場合は 0 が返される。エラーならば -1 が返され、 errno が適切に設定される。
エラー
- EFAULT
- list が不正なアドレスである。
- EINVAL
- setgroups ()で、 size が NGROUPS (Linux 2.0.32 では 32) より大きい。 getgroups ()の場合 size が補助グループ ID の数より小さいが 0 でない。
- EPERM
- 呼び出し元プロセスには setgroups ()を呼び出すための十分な特権がない。
注意
プロセスは、実効グループ ID に加え、最大 NGROUPS_MAX までの 補助グループ ID を持つことができる。 補助グループ ID のセットは親プロセスから継承されるが、 setgroups ()を使って変更できる。 補助グループ ID の最大数は sysconf (3) を使って以下のようにして調べることができる:
long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX);getgroups ()で返される値の最大値は、この方法で得られた値以下になる。
setgroups ()のプロトタイプは _BSD_SOURCE を定義した場合にのみ有効になる。
準拠
SVr4, 4.3BSD. getgroups ()関数は POSIX.1-2001 に準拠している。 setgroups ()は特権を必要とするため、POSIX.1-2001 に従っていない。