Man page - fgetpwent_r(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

GETPWENT_R

名 前
書 式
説 明
返 り 値
エ ラ ー
属 性
準 拠
注 意

関 連 項 目
こ の 文 書 に つ い て

名 前

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 (),
glibc 2.19 以 降 :
_DEFAULT_SOURCE
glibc 2.19 以 前 :
_BSD_SOURCE || _SVID_SOURCE
fgetpwent_r
():
glibc 2.19 以 降 :
_DEFAULT_SOURCE
glibc 2.19 以 前 :
_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

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

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-17728-1.png

In the above table, pwent in race:pwent signifies that if any of the functions setpwent (), getpwent (), endpwent (), or getpwent_r () are used in parallel in different threads of a program, then data races could occur.

準 拠

こ れ ら の 関 数 は 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>
#include <stdint.h>
#define BUFLEN 4096

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

setpwent();
while (1) {
i = getpwent_r(&pw, buf, sizeof(buf), &pwp);
if (i)
break;
printf("%s (%jd)\tHOME %s\tSHELL %s\n", pwp->pw_name,
(intmax_t) 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 プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。