GETGROUPLIST
Section: Linux Programmer's Manual (3)
Updated: 2007-07-26
Index
JM Home Page
roff page
名前
getgrouplist - ユーザが所属するグループのリスト
書式
#include <grp.h>
int getgrouplist(const char *user, gid_t group,
gid_t *groups, int *ngroups);
glibc 向けの機能検査マクロの要件
(feature_test_macros(7)
参照):
getgrouplist():
_BSD_SOURCE
説明
getgrouplist()
関数は
user
が所属する全てのグループをグループデータベースで調べる。
グループ ID
*ngroups
までに対応するグループが、配列
groups
に格納される;
この関数からの返り値は、実際に格納されたグループ ID の数である。
グループ
group
は
getgrouplist()
で返されるグループのリストに自動的に含められる。
返り値
見つかった全てのグループの数より
*ngroups
が小さい場合、
getgrouplist()
は -1 を返す。
成功した場合も、失敗した場合も、実際のグループの数が
*ngroups
に格納される。
バージョン
この関数は glibc 2.2.4 から存在する。
準拠
この関数は非標準である。ほとんどの BSD に存在する。
バグ
この関数の glibc 2.3.2 での実装は間違えている:
実際のグループの数が
*ngroups
より大きい場合、メモリを上書きしてしまう。
例
/* これは glibc 2.3.2 ではクラッシュする。*/
#include <stdio.h>
#include <stdlib.h>
#include <grp.h>
#include <pwd.h>
int
main(void)
{
int i, ng = 0;
char *user = "who"; /* ユーザ名をここに書く。 */
gid_t *groups = NULL;
struct passwd *pw = getpwnam(user);
if (pw == NULL)
exit(EXIT_SUCCESS);
if (getgrouplist(user, pw->pw_gid, NULL, &ng) < 0) {
groups = (gid_t *) malloc(ng * sizeof (gid_t));
getgrouplist(user, pw->pw_gid, groups, &ng);
}
for (i = 0; i < ng; i++)
printf("%d\n", groups[i]);
exit(EXIT_SUCCESS);
}
関連項目
getgroups(2),
setgroups(2)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- バージョン
-
- 準拠
-
- バグ
-
- 例
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:42 GMT, November 19, 2007