/etc/netconfig にアクセスし、netconfig(4) 内のエントリを検索する関数は、3 つあります。これら 3 つのルーチンである setnetconfig(3NSL)、 getnetconfigent(3NSL) および endnetconfig(3NSL) は、次のインタフェースを使用します。
#include <netconfig.h> void *setnetconfig(void); struct netconfig *getnetconfig(void *); int endnetconfig(void *);
setnetconfig(3NSL) 呼び出しは、データベースの最初のインデックスへのレコードポインタを初期化します。setnetconfig(3NSL) は、最初に getnetconfig(3NSL) を使用する前に使用する必要があります。setnetconfig(3NSL) は、getnetconfig(3NSL) ルーチンが使用する一意のハンドル (データベースへのポインタ) を返します。getnetconfig(3NSL) の各呼び出しは、netconfig(4) データベース内の現在のレコードへのポインタを返し、次のレコードを指すようにポインタを 1 だけ増加させます。また、getnetconfig(3NSL) は netconfig(4) データベース全体の検索にも使用できます。getnetconfig(3NSL) は、ファイルの終わりに NULL を返します。
処理の完了時にデータベースポインタを解放するには、endnetconfig(3NSL) を使用する必要があります。endnetconfig(3NSL) は、setnetconfig(3NSL) の前に呼び出してはなりません。
void *handlep; struct netconfig *nconf; if ((handlep = setnetconfig()) == (void *)NULL){ nc_perror(argv[0]); exit(1); } /* * トランスポートプロバイダ情報は、nconf に記載されている。 * process_transport は、ユーザーが提供するルーチンであり、 * トランスポート nconf を経由してサーバーへの接続を試みる。 */ while ((nconf = getnetconfig(handlep)) != (struct netconfig *)NULL){ if (process_transport(nconf) == SUCCESS) break; } endnetconfig(handlep);
getnetconfigent(3NSL) および freenetconfigent(3NSL) の各関数は、次のインタフェースを使用します。
#include <netconfig.h> struct netconfig *getnetconfigent(char *); int freenetconfigent(struct netconfig *);
getnetconfigent(3NSL) は、netid に対応した netconfig 構造体へのポインタを返します。netid が無効の場合は、NULL を返します。freenetconfigent(3NSL) は、getnetconfigent(3NSL) の前に呼び出してはなりません。
freenetconfigent(3NSL) は、getnetconfigent(3NSL) で返された構造体を解放します。例 4-5 に、getnetconfigent(3NSL) と freenetconfigent(3NSL) の各ルーチンを示します。
/* udp がこのホストの netid と仮定する */ struct netconfig *nconf; if ((nconf = getnetconfigent("udp")) == (struct netconfig *)NULL){ nc_perror("no information about udp"); exit(1); } process_transport(nconf); freenetconfigent(nconf);