GETPWENT_R

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

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) を参照。
インターフェース 属性 値
getpwent_r() Thread safety MT-Unsafe race:pwent locale
fgetpwent_r() Thread safety MT-Safe

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/ に書かれている。

関連キーワード

passwd   struct   バッファー   getpwent   パスワード   エントリー   ポインター   ストリーム   ユーザー名   格納   pwbufp   fgetpwent   size   構造体   gecos   ホーム   shell   シェル   領域   提供   保持   Thread   safety   pwent   buflen

Linux マニュアル 一覧

関連するコマンド・関数

fgetpwent_r.3   fgetpwent.3   getpw.3   getpwnam.3   getpwnam_r.3   getpwuid.3
 

Index

名前
書式
説明
返り値
エラー
属性
準拠
注意
例
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:26 GMT, October 11, 2026