日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




getpwnam関数は,指定された name のユーザ・データベース・エントリについての情報を返します。

getpwnam_r関数は, getpwnamのリエントラント・バージョンです。


形式

#include <pwd.h>

struct passwd *getpwnam (const char *name); (ISO POSIX-1)

struct passwd *getpwnam (const char *name, ...); (HP C Extension)

int getpwnam_r (const char *name, struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result); (ISO POSIX-1) , (Integrity, Alpha)

int getpwnam_r (const char *name, struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result, ...); (HP C Extension) , (Integrity, Alpha)

関数バリアント getpwnam関数と getpwnam_r関数には, __getpwnam32, _getpwnam_r32, __getpwnam64, _getpwnam_r64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.9 節を参照してください。

引数



name

属性を読み込むユーザの名前。

pwd

この関数が結果を格納する passwd構造体のアドレス。

buffer

passwd構造体の最長のエントリを保持できる, result 引数用の作業バッファ。 passwd構造体から指す記憶域は, buffer引数のメモリ (長さは bufsize 文字) から割り当てられます。

bufsize

buffer が指す文字配列の長さ。

result

成功して戻った場合,pwd が設定されます。失敗して戻った場合,result には NULL が設定されます。

...

1 または 0 となるオプションの引数。 1 を指定すると,ディレクトリ指定は,OpenVMS 形式で返されます。 0 を指定すると,ディレクトリ指定 (パス名) は,UNIX 形式で返されます。この引数を省略すると,この関数は現在のコマンド言語インタプリタに従って,ディレクトリ指定を返します。 UNIX 形式のディレクトリ指定についての詳細は,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.3.3 項を参照してください。

説明

getpwnam関数は,ユーザ・データベース内で指定された name のエントリを検索します。この関数は,データベース内のユーザ・エントリのうち, passwd構造体の pw_nameメンバが name 引数と一致する最初のエントリを返します。

passwd構造体は,次に示すように <pwd.h>ヘッダ・ファイルに定義されています。

pw_name ユーザのログイン名
pw_uid 数値ユーザ ID
pw_gid 数値グループ ID
pw_dir ユーザのホーム・ディレクトリ
pw_shell ユーザの初期プログラム

  注意
getpwnam関数で生成された情報はすべて,スレッドごとの静的領域に格納され,この関数の次の呼び出しで上書きされます。

getpwnam_r関数は, getpwnamのリエントラント・バージョンです。 getpwnam_r関数は, pwd が指す passwd構造体をアップデートし, result が指すメモリ位置にこの構造体へのポインタを格納します。この構造体には,指定された name と一致するユーザ・データベースのエントリが格納されます。この構造体から指す記憶域は, buffer 引数のメモリ (長さは bufsize 文字) から割り当てられます。このバッファに必要なサイズは, sysconf関数の _SC_GETPW_R_SIZE_MAX パラメータで調べることができます。エラーの場合,または要求されたエントリが見つからない場合は, result が指すメモリ位置に,NULL ポインタが返されます。

エラー状態をチェックするアプリケーションは, getpwnamを呼び出す前に, errnoに 0 を設定する必要があります。 getpwnamが NULL ポインタを返し, errnoがゼロでない場合,エラーが発生しています。


戻り値

x 一致するエントリが見つかった場合, getpwnam は正しい passwd 構造体へのポインタを返します。
NULL エラーが発生した場合,または指定されたエントリが見つからなかった場合, getpwnam は NULL を返します。 errno には,エラーを示す値が設定されます。 getpwnam 関数は,以下の場合に失敗します。

  • EIO -- 入出力エラーが発生しました。

  • EINTR -- getpwnam の実行中にシグナルをキャッチしました。

  • EMFILE -- 呼び出し元プロセス内で, OPEN_MAX 個のファイル記述子が現在オープンされています。

  • ENFILE -- 許されている最大個数のファイルが,現在システム内でオープンされています。

0 成功した場合, getpwnam_r は 0 を返し, result が指すメモリ位置に,アップデートした passwd 構造体へのポインタを格納します。
0 失敗した場合 (エラー,または要求されたエントリが見つからない場合), getpwnam_r は 0 を返し, result が指すメモリ位置に,NULL ポインタを格納します。 getpwnam_r 関数は,次の場合に失敗します。

  • ERANGE -- bufferbufsize で指定された記憶域は,得られた passwd 構造体から指すデータを格納するには不十分です。


/def=_USE_STD_STAT を指定してサンプルプログラムをビルドすると,次のような動作になります。

  • DECC$POSIX_STYLE_UID 論理名が有効な場合

    • POSIX 形式の識別子をサポートする場合は次のとおりです。
      - getpwnam_r API は TCP/IP プロキシ・データベースから情報を読み取り, UID と GID に TCP/IP プロキシ・データベースからの値を割り当てます。
      - getgrgid_r API は,getpwnam_r API によって返される GID に対応する権限データベースから gr_name および gr_mem を返します。

    • POSIX 形式の識別子をサポートしない場合, getpwnam_r は GID および UID に SYSGEN パラメータ "DEFUID" および "DEFGID" を割り当てます。

  • DECC$POSIX_STYLE_UID 論理名が未定義の場合
    getpwnam 関数は,SYSUAF.DAT で指定されている指定の名前のユーザ・データベース・エントリについての情報を返します。

#include <unistd>  // getuid() 
#include <pwd>     // getpwuid_r() 
#include <grp> 
#include <errno.h> 
#include <stdio.h> 
#include <string.h> 
 
main() 
{ 
 
struct passwd pwd2; 
const unsigned int PWD_BUFF_SIZE = 1024; const unsigned int GRP_BUFF_SIZE = 1024; 
 
struct passwd *p_passwd; 
struct passwd *result; 
struct group *grpresult; 
struct group grp; 
char pwdBuffer[PWD_BUFF_SIZE],*name; 
char grpBuffer[GRP_BUFF_SIZE]; 
char buf[PWD_BUFF_SIZE]; 
 
gid_t gid; 
uid_t uid; 
 
int status; 
p_passwd = getpwnam("user1"); 
uid=p_passwd->pw_uid; 
gid=p_passwd->pw_gid; 
 
printf("User id is %u\n", uid); 
printf("Group id is %u\n", gid); 
 
status = getpwnam_r("user1", &pwd2, pwdBuffer, PWD_BUFF_SIZE, &result); 
 
gid = pwd2.pw_gid; 
 
status = getgrgid_r(gid, &grp, grpBuffer, GRP_BUFF_SIZE, &grpresult); 
 
gid=grp.gr_gid; name=grp.gr_name; 
 
strcpy(name,grp.gr_name); 
 
printf("Group id is %u\n", gid); 
printf("Group name is %s\n", name); 
 
} 

/def=_USE_STD_STATを指定したサンプルプログラムを実行すると,次のような結果が見られます。

  • DECC$POSIX_STYLE_UID 論理名が有効でない場合,グループ名 RTL で UID 11010118 (65536*168+ 70 の結果),GID 168 が出力されます。

  • DECC$POSIX_STYLE_UID 論理名が有効で POSIX 形式の識別子がサポートされる場合, FOR_POSIX_TEST のグループ名で UID 70,GID 168 が出力されます(TCP/IP プロキシ・データベースから抽出)。

  • DECC$POSIX_STYLE_UID 論理名は有効だが POSIX 形式の識別子はサポートされていない場合,グループ名は無効なバッファとして UID DEFUID,GID DEFGID が出力されます。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.