Manpages

名 前

getpwent_r, fgetpwent_r − パ ス ワ ー ド フ ァ イ ル の エ ン ト リ ー を リ エ ン ト ラ ン ト で 取 り 出 す

書 式

#include <pwd.h>

int getpwent_r(struct passwd *pwbuf, char *buf,
size_t
buflen, struct passwd **pwbufp);

int fgetpwent_r(FILE *stream, struct passwd *pwbuf, char *buf,
size_t
buflen, struct passwd **pwbufp);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

getpwent_r(), _BSD_SOURCE || _SVID_SOURCE
fgetpwent_r
(): _SVID_SOURCE

説 明

関 数 getpwent_r() と fgetpwent_r() は getpwent(3)fgetpwent(3) の リ エ ン ト ラ ン ト (reentrant) 版 で あ る 。 前 者 は 、 setpwent(3) に よ っ て 初 期 化 さ れ た ス ト リ ー ム か ら 、 次 の パ ス ワ ー ド エ ン ト リ ー を 読 み 込 む 。 後 者 は 、 stream か ら 次 の パ ス ワ ー ド エ ン ト リ ー を 読 み 込 む 。

passwd 構 造 体 は 、 <pwd.h> で 以 下 の よ う に 定 義 さ れ て い る :

struct passwd {
char *pw_name; /* ユ ー ザ ー 名 */
char *pw_passwd; /* ユ ー ザ ー の パ ス ワ ー ド */
uid_t pw_uid; /* ユ ー ザ ー ID */
gid_t pw_gid; /* グ ル ー プ ID */
char *pw_gecos; /* ユ ー ザ ー 情 報 */
char *pw_dir; /* ホ ー ム デ ィ レ ク ト リ */
char *pw_shell; /* シ ェ ル プ ロ グ ラ ム */ }; こ の 構 造 体 の フ ィ ー ル ド の 詳 細 は passwd(5) を 参 照 の こ と 。 リ エ ン ト ラ ン ト で な い 関 数 は 静 的 な 格 納 領 域 へ の ポ イ ン タ ー を 返 す 。 こ の 静 的 な 格 納 領 域 に は 、 更 に ユ ー ザ ー 名 ・ パ ス ワ ー ド ・ gecos フ ィ ー ル ド ・ ホ ー ム デ ィ レ ク ト リ ・ シ ェ ル へ の ポ イ ン タ ー が 含 ま れ る 。 こ こ で 説 明 さ れ て い る リ エ ン ト ラ ン ト 版 の 関 数 は 、 呼 び 出 し 側 か ら 提 供 さ れ る バ ッ フ ァ ー に ユ ー ザ ー 名 な ど 全 て を 返 す 。 最 初 の 引 き 数 と し て struct passwd を 保 持 で き る バ ッ フ ァ ー pwbuf が あ る 。 次 に そ の 他 の 文 字 列 を 保 持 で き る サ イ ズ buflen の バ ッ フ ァ ー buf が あ る 。 こ れ ら の 関 数 の 結 果 (ス ト リ ー ム か ら 読 み 込 ま れ た struct passwd) は 、 提 供 さ れ た バ ッ フ ァ ー *pwbuf に 格 納 さ れ 、 こ の struct passwd へ の ポ イ ン タ ー は *pwbufp に 返 さ れ る 。

返 り 値

成 功 し た 場 合 、 こ れ ら の 関 数 は 0 を 返 し 、 *pwbufpstruct passwd へ の ポ イ ン タ ー と な る 。 エ ラ ー の 場 合 、 こ れ ら の 関 数 は エ ラ ー 値 を 返 し 、 *pwbufp は NULL に な る 。

エ ラ ー

ENOENT 次 の エ ン ト リ ー が な い 。

ERANGE 十 分 な バ ッ フ ァ ー 空 間 が 与 え ら れ て い な い 。 も っ と 大 き な バ ッ フ ァ ー で 再 度 実 行 す る こ と 。

準 拠

こ れ ら の 関 数 は GNU 拡 張 で あ り 、 POSIX 版 の 関 数 getpwnam_r(3) の 形 式 に 似 せ て あ る 。 他 の シ ス テ ム で は 以 下 の プ ロ ト タ イ プ が 使 わ れ て い る 。

struct passwd *
getpwent_r(struct passwd *pwd, char *buf, int buflen); よ り 良 い も の で は 、 以 下 の よ う に な っ て い る 。

int
getpwent_r(struct passwd *pwd, char *buf, int buflen,
FILE **pw_fp);

注 意

関 数 getpwent_r() は 本 当 の リ エ ン ト ラ ン ト で は な い 。 な ぜ な ら 、 ス ト リ ー ム の 読 み 込 み 位 置 を 他 の 全 て の ス レ ッ ド と 共 有 し て い る た め で あ る 。

#define _GNU_SOURCE
#include <pwd.h>
#include <stdio.h>
#define BUFLEN 4096

int
main(void)
{
struct passwd pw, *pwp;
char buf[BUFLEN];
int i;

setpwent();
while (1) {
i = getpwent_r(&pw, buf, BUFLEN, &pwp);
if (i)
break;
printf("%s (%d)\tHOME %s\tSHELL %s\n", pwp−>pw_name,
pwp−>pw_uid, pwp−>pw_dir, pwp−>pw_shell); }
endpwent();
exit(EXIT_SUCCESS); }

関 連 項 目

fgetpwent(3), getpw(3), getpwent(3), getpwnam(3), getpwuid(3), putpwent(3), passwd(5)

こ の 文 書 に つ い て

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