名 前
getgrent_r, fgetgrent_r − グ ル ー プ フ ァ イ ル エ ン ト リ ー を リ エ ン ト ラ ン ト (reentrant) に 取 り 出 す
書 式
#include <grp.h>
int
getgrent_r(struct group *gbuf, char
*buf,
size_t buflen, struct group
**gbufp);
int
fgetgrent_r(FILE *stream, struct group
*gbuf, char *buf,
size_t buflen, struct group
**gbufp);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
getgrent_r():
_GNU_SOURCE
fgetgrent_r(): _SVID_SOURCE
説 明
関 数 getgrent_r() と fgetgrent_r() は getgrent(3) と fgetgrent(3) の リ エ ン ト ラ ン ト 版 で あ る 。 前 者 は 、 setgrent(3) に よ っ て 初 期 化 さ れ た ス ト リ ー ム か ら 、 次 の グ ル ー プ フ ァ イ ル の エ ン ト リ ー を 読 み 込 む 。 後 者 は 、 stream か ら 次 の グ ル ー プ フ ァ イ ル の エ ン ト リ ー を 読 み 込 む 。
group 構 造 体 は <grp.h> で 以 下 の よ う に 定 義 さ れ て い る :
struct group {
char *gr_name; /* グ ル ー プ
名 */
char *gr_passwd; /* グ ル ー プ
の パ ス ワ ー ド */
gid_t gr_gid; /* グ ル ー プ ID */
char **gr_mem; /* グ ル ー プ
の メ ン バ 名 へ
の ポ イ ン タ ー
の 配 列
(配 列 は ヌ ル で
終 端 す る ) */ }; こ
の 構 造 体 の フ
ィ ー ル ド の 詳
細 は group(5) を 参 照
の こ と 。 リ エ
ン ト ラ ン ト で
な い 関 数 は 静
的 な 格 納 領 域
へ の ポ イ ン タ
ー を 返 す 。 こ
の 静 的 な 格 納
領 域 に は 、 更
に グ ル ー プ 名
・ パ ス ワ ー ド
・ メ ン バ へ の
ポ イ ン タ ー が
含 ま れ る 。 こ
こ で 説 明 さ れ
て い る リ エ ン
ト ラ ン ト な 関
数 は 、 呼 び 出
し 側 か ら 提 供
さ れ る バ ッ フ
ァ ー に グ ル ー
プ 名 な ど 全 て
を 返 す 。 最 初
の 引 き 数 と し
て struct group を 保 持
で き る バ ッ フ
ァ ー gbuf が あ る
。 次 に そ の 他
の 文 字 列 を 保
持 で き る サ イ
ズ buflen の バ ッ フ
ァ ー buf が あ る
。 こ れ ら の 関
数 の 結 果 (ス ト
リ ー ム か ら 読
み 込 ま れ た struct
group) は 、 提 供 さ
れ た バ ッ フ ァ
ー *gbuf に 格 納 さ
れ 、 こ の struct group
へ の ポ イ ン タ
ー は *gbufp に 返 さ
れ る 。
返 り 値
成 功 し た 場 合 、 こ れ ら の 関 数 は 0 を 返 し 、 *gbufp は struct group へ の ポ イ ン タ ー と な る 。 エ ラ ー の 場 合 、 こ れ ら の 関 数 は エ ラ ー 値 を 返 し 、 *gbufp は NULL に な る 。
エ ラ ー
ENOENT 次 の エ ン ト リ ー が な い 。 | |
ERANGE 十 分 な バ ッ フ ァ ー 空 間 が 与 え ら れ て い な い 。 も っ と 大 き な バ ッ フ ァ ー で 再 度 実 行 す る こ と 。 |
準 拠
こ れ ら の 関 数 は GNU 拡 張 で あ り 、 POSIX 版 の 関 数 getpwnam_r(3) の 形 式 に 似 せ て あ る 。 他 の シ ス テ ム で は 以 下 の プ ロ ト タ イ プ が 使 わ れ て い る 。
struct group
*getgrent_r(struct group *grp, char *buf,
int buflen); よ り 良 い も
の で は 、 以 下
の よ う に な っ
て い る 。
int
getgrent_r(struct group *grp, char *buf, int buflen,
FILE **gr_fp);
注 意
関 数 getgrent_r() は 本 当 の リ エ ン ト ラ ン ト で は な い 。 な ぜ な ら 、 ス ト リ ー ム の 読 み 込 み 位 置 を 他 の 全 て の ス レ ッ ド と 共 有 し て い る た め で あ る 。
例
#define
_GNU_SOURCE
#include <grp.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFLEN 4096
int
main(void)
{
struct group grp, *grpp;
char buf[BUFLEN];
int i;
setgrent();
while (1) {
i = getgrent_r(&grp, buf, BUFLEN, &grpp);
if (i)
break;
printf("%s (%d):", grpp−>gr_name,
grpp−>gr_gid);
for (i = 0; ; i++) {
if (grpp−>gr_mem[i] == NULL)
break;
printf(" %s", grpp−>gr_mem[i]); }
printf("\n"); }
endgrent();
exit(EXIT_SUCCESS); }
関 連 項 目
fgetgrent(3), getgrent(3), getgrgid(3), getgrnam(3), putgrent(3), group(5)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。