GETSERVENT(3)

名称
getservent, getservbyport, getservbyname, setservent, endservent - サービスエントリの取得

ライブラリ
libc

書式
<netdb.h> struct servent * getservent() struct servent * getservbyname(const char *name, const char *proto) struct servent * getservbyport(int port, const char *proto) void setservent(int stayopen) void endservent(void)

解説
getservent(), getservbyname() および getservbyport() 関数はそれぞれ、次に示す構造を持つオブジェクトへのポインタを返します。 構造体にはネットワークサービスデータベース /etc/services にある、行の内訳フィールドが含まれます。

    struct  servent {
            char    *s_name;        /* サービスのオフィシャル名 */
            char    **s_aliases;    /* エイリアスリスト */
            int     s_port;         /* サービスが常駐するポート */
            char    *s_proto;       /* 使用するプロトコル */
    };

この構造体のメンバは次のとおりです。

s_name
    サービスのオフィシャル名。

s_aliases
    サービスの別名 (エイリアス) の 0 で終るリスト。

s_port
    サービスが存在するポート番号。 ポート番号はネットワークバイトオーダで返されます。

s_proto
    サービスとのコンタクト中に使用するプロトコル名。

getservent() 関数は、ファイルの次の行を読み込みます。 その際、必要ならばファイルをオープンします。

setservent() 関数はファイルをオープンしリワインドします。 stayopen フラグが 0 でなければ、 getservbyname() または getservbyport() の各呼び出しの後でも、ネットデータベースはクローズされません。

endservent() 関数はファイルをクローズします。

getservbyname() および getservbyport() 関数は、適合するプロトコル名またはポート番号 (これはネットワークバイトオーダで指定されなければなりません) が見つかるか、さもなければ EOF に達するまで、ファイルを最初から順次検索します。 プロトコル名が与えられていても ( NULL でなくても)、検索は適合するプロトコルが見つかるまで続けられます。

関連ファイル
/etc/services

診断
EOF またはエラーの場合、 Null ポインタ (0) が返ります。

関連項目
getprotoent(3), services(5)

歴史
getservent(), getservbyport(), getservbyname(), setservent() および endservent() 関数は、 4.2BSD で登場しました。

バグ
これらの関数は静的データ記憶域を使用します。 後でこのデータを使用する必要があれば、以後のこれらの関数呼び出しで データが上書きされる前に、コピーして保存する必要があります。 ポート番号がすべて 32 ビットに適合すると期待するのは、たぶん素朴過ぎます。