GETGRENT(3) FreeBSD ライブラリ関数マニュアル GETGRENT(3)
名称
getgrent, getgrnam, getgrgid, setgroupent, setgrent, endgrent − グループ データベースの操作 |
書式
#include <sys/types.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
グループデータベースファイル 関連項目 |
歴史
関数 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 |