スポンサーリンク

GETGRENT(3) FreeBSD ライブラリ関数マニュアル GETGRENT(3)

名称

getgrent, getgrnam, getgrgid, setgroupent, setgrent, endgrent − グループ データベースの操作

書式

#include <sys/types.h>
#include <grp.h>

struct group *

getgrent(void);

struct group *

getgrnam(const char *name);

struct group *

getgrgid(gid_t gid);

int

setgroupent(int stayopen);

int

setgrent(void);

void

endgrent(void);

解説

これらの関数はいずれも、 group(5) に記述されたグループデータベースファイ ル /etc/group を操作します。データベースの各行は、インクルードファイル ⟨grp.h⟩ にある構造体 group によって定義されます。次のとおりです。

      struct group {

char

*gr_name;

/* グループ名 */

char

*gr_passwd;

/* グループパスワード */

int

gr_gid;

/* グループ id */

char

**gr_mem;

/* グループメンバ */

};

関数 getgrnam() および getgrgid() は、 name に示す与えられたグループ名ま たは gid に示すグループ id を、グループデータベースで検索して、それぞれに 最初の適合エントリを返します。異なるエントリに同一グループ名または、同一 グループ id が与えられていると、未定義な不測の挙動をもたらすことがありま す。

getgrent() 関数は、グループデータベースを順次読み込みます。完全なグループ リストを着実に生成するプログラム向きです。

3 つのルーチンはいずれも、読み込みに必要ならば目的のグループファイルを オープンします。

setgroupent() 関数は目的のファイルをオープン、またはすでにオープンされて いる場合はリワインドします。 stayopen が 0 でなければ、ファイル記述子は オープンのままにされ、以後の関数呼び出しがきわめて高速化されます。ただし getgrent() の場合は、デフォルトでファイル記述子をクローズしないので、この 機能は不要です。また、グループファイルが更新される可能性があるので、長期 間実行するプログラムでこの機能を使用するのは危険です。注意してください。

setgrent() 関数は、0 の引数を持つ setgroupent() と同じです。

endgrent() 関数は、オープンされているファイルをクローズします。

YP/NIS の相互作用

yp(4) グループデータベースが使用可能な場合、要求されたグループがローカル の /etc/groupfile に見付からないと、 getgrnam() および getgrgid() 関数 は、 YP マップ ‘‘group.byname’’ および ‘‘group.bygid’’ をそれぞれ使用しま す。 group(5) で記述されたとおりに全体マップが使用可能ならば、 getgrent() 関数は YP マップ ‘‘group.byname’’ を通ります。

戻り値

関数 getgrent(), getgrnam(), getgrgid() は、いずれも成功するとグループエ ントリのポインタを返します。エンドオブファイルに到達するかエラーが発生し た場合は、ヌルポインタが返ります。関数 setgroupent() および setgrent() は、処理が無事に完了した場合は値 1 を返します。その他の場合は値 0 が返り ます。関数 endgrent() および setgrfile() の戻り値はありません。

関連ファイル

       /etc/group

グループデータベースファイル

関連項目

getpwent(3), yp(4), group(5)

歴史

関数 endgrent(), getgrent(), getgrnam(), getgrgid(), setgrent() は、 Version 7 AT&T UNIX で最初に取り入れられました。関数 setgrfile() および setgroupent() は、 4.3BSD−Reno で最初に取り入れられました。

互換性

代替パスワードデータベースの規格を許した歴史的な関数 setgrfile() は、これ まで非難されてきましたが、もはや使用できません。

バグ

関数 getgrent(), getgrnam(), getgrgid(), setgroupent(), setgrent() は、そ れぞれの結果を内部の静的オブジェクトに残し、そのオブジェクトのポインタを 返します。後に続く同じ関数の呼び出しは、その同じオブジェクトを改変しま す。

FreeBSD 10.0 September 29, 1994 FreeBSD 10.0

スポンサーリンク