Manpages

名 前

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 を 返 し 、 *gbufpstruct 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/ に 書 か れ て い る 。