名 前
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 を 返 し 、 *pwbufp は struct 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/ に 書 か れ て い る 。