環境変数 NETPATH を経由して間接的にネットワーク構成データベースにアクセスするルーチンは、3 つあります。この環境変数では、アプリケーションが使用するトランスポート (複数も可) と、使用できるトランスポートを試す順序とを指定します。NETPATH の構成要素は、左から右へと読み込まれます。これらの関数は、次のインタフェースを使用します。
#include <netconfig.h> void *setnetpath(void); struct netconfig *getnetpath(void *); int endnetpath(void *);
setnetpath(3NSL) の呼び出しは、NETPATH の検索を初期化します。また、環境変数 NETPATH で指定したエントリが含まれるデータベースへのポインタを返します。このポインタはハンドルと呼ばれ、getnetpath(3NSL) を使用してデータベース内を移動する際に使用します。setnetpath(3NSL) 関数は、getnetpath(3NSL) を最初に呼び出す前に呼び出しておく必要があります。
getnetpath(3NSL) は、最初に呼び出されると、環境変数 NETPATH の最初の構成要素に対応する netconfig(4) ファイル内のエントリへのポインタを返します。以降の getnetpath(3NSL) 呼び出しでは、環境変数 NETPATH
の次の構成要素に対応する netconfig(4) ファイル内のエントリへのポインタを返します。NETPATH に構成要素がなくなると、getnetpath(3NSL) は NULL を返します。setnetpath(3NSL) を最初に呼び出さずに getnetpath(3NSL) を呼び出すと、エラーが発生します。getnetpath(3NSL) には、setnetpath(3NSL) で返されたポインタを引数に指定する必要があります。
getnetpath(3NSL) は、無効な NETPATH 構成要素を無視するだけで、メッセージを出力しません。無効な NETPATH
構成要素とは、netconfig(4) データベースに対応するエントリがないものです。
環境変数 NETPATH が設定されていない場合、getnetpath(3NSL) は、netconfig(4) データベースのデフォルトトランスポートまたは可視トランスポートの順序が NETPATH に設定されているように振る舞います。
endnetpath(3NSL) は、処理の完了時に呼び出され、環境変数 NETPATH 内の要素へのデータベースポインタを解放します。setnetpath(3NSL) が事前に呼び出されていないと、endnetpath(3NSL) は失敗します。例 4-3 に、setnetpath(3NSL)、getnetpath(3NSL)、および endnetpath(3NSL) の各ルーチンを示します。
#include <netconfig.h> void *handlep; struct netconfig *nconf; if ((handlep = setnetpath()) == (void *)NULL) { nc_perror(argv[0]); exit(1); } while ((nconf = getnetpath(handlep)) != (struct netconfig *)NULL) { /* * nconf がトランスポートプロバイダ情報を示す */ } endnetpath(handlep);
getnetpath(3NSL) 経由で取得した netconfig(4) 構造体は、endnetpath(3NSL) の実行後無効になります。構造体内のデータを保持するには、getnetconfigent(nconf->nc_netid) を使用して、それらを新しいデータ構造体にコピーします。