.\" %FreeBSD: src/lib/libc/gen/getvfsent.3,v 1.17.2.5 2001/12/14 18:33:51 ru Exp % .\" Written by Garrett A. Wollman, September 1994. .\" This manual page is in the public domain. .\" .\" $FreeBSD: doc/ja_JP.eucJP/man/man3/getvfsent.3,v 1.7 2004/03/23 13:39:31 kuriyama Exp $ .Dd September 24, 1994 .Dt GETVFSENT 3 .Os .Sh 名称 .Nm getvfsent , .Nm setvfsent , .Nm endvfsent , .Nm vfsisloadable , .Nm vfsload .Nd 仮想ファイルシステムモジュールを管理 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/param.h .In sys/mount.h .Ft struct ovfsconf * .Fn getvfsent "void" .Ft void .Fn setvfsent "int cachelist" .Ft void .Fn endvfsent "void" .Ft int .Fn vfsisloadable "const char *name" .Ft int .Fn vfsload "const char *name" .Sh 解説 .Fn getvfsent 関数によって、カーネルが管理するインストール済の仮想ファイルシステムモジュール のリストに、簡単にアクセスできます。リストのファイルシステムを 1 回に 1 つづつ段階的に処理します。利用できるデータがそれ以上なくなると、 ヌル ポインタが返ります。構造体 .Dq Li struct ovfsconf のフィールドは次のとおりです。 .Pp .Bl -tag -compact -width vfc_refcount .It vfc_name ファイルシステムの名前。 .It vfc_index カーネルによって割り当てられ .Xr mount 2 の呼び出しに使用された、ファイルシステムのタイプ番号。 .It vfc_refcount このファイルシステムの参照数 (通常はマウント数ですが、 アンロードできないかカーネルに静的にリンクされている ファイルシステムでは、マウント数に 1 を加えたものになります)。 .It vfc_flags フラグビット。 .El .Pp フラグは次のように定義されています: .Pp .Bl -tag -width VFCF_SYNTHETIC -compact .It Dv VFCF_STATIC カーネルに静的に組み込まれている .It Dv VFCF_NETWORK データをネットワーク経由で取得し得る .It Dv VFCF_READONLY 書き込みは未実装 .It Dv VFCF_SYNTHETIC データは実ファイルを表現しない .It Dv VFCF_LOOPBACK マウント済みのファイルシステムに対する別名 .It Dv VFCF_UNICODE ファイル名を Unicode で格納 .El .Pp .Fn setvfsent および .Fn endvfsent 関数は、 .Xr sysctl 3 によってカーネル からまとめて取得されるファイルシステムリストの、キャッシング制御に 使用されます。 .Fn setvfsent の .Fa cachelist パラメータが 0 でなければ、これら 検索関数のどれかを最初に呼び出した時点でリストはただ 1 回だけ取り出され、 キャッシュをクリアするために .Fn endvfsent が呼び出されるまで保持されます。 一般に .Fn setvfsent 1 は、 .Fn getvfsent を使用するプログラムによって呼び出される必要があり、 .Fn setvfsent 0 は (これもデフォルトの状態で)、 .Fn vfsload 関数を使用するプログラムによって呼び出される必要があります。 .Pp .Fn vfsisloadable 関数は、後で .Fn vfsload name の呼び出しが続きそうだと非 0 値を返します。ここで .Dq そう と言うのは、 .Fn vfsisloadable は .Fn vfsload が成功するための条件をチェックしないからです。 .Pp .Fn vfsload 関数は、ファイルシステム .Fa name の実装カーネルモジュールをロード しようと試みます。ファイルシステムモジュールを無事に突き止めてロードした 場合は 0 が、その他の場合は非 0 が返ります。この関数を呼び出せるのは次に 示す状況だけです。 .Bl -enum .It .Fn getvfsbyname を呼び出して非 0 値が返った場合。 .It .Fn vfsisloadable を呼び出して非 0 値が返った場合。 .El .Pp .Xr mount_cd9660 8 のソースから取った使用例を次に示します。 .Bd -literal -offset indent struct vfsconf *vfc; int error; /* ここにセットアップコードが入る */ error = getvfsbyname("cd9660", &vfc); if (error && vfsisloadable("cd9660")) { if (vfsload("cd9660")) err(EX_OSERR, "vfsload(cd9660)"); endvfsent(); /* flush cache */ error = getvfsbyname("cd9660", &vfc); } if (error) errx(1, "cd9660 filesystem is not available"); if (mount(vfc.vfc_name, dir, mntflags, &args) < 0) err(1, NULL); .Ed .Sh 戻り値 .Fn getvfsent ルーチンは、成功すると静的データ構造体のポインタを、失敗すると ヌル ポインタを返します。原因が .Xr sysctl 3 または .Xr malloc 3 で失敗した場合は、 .Va errno がそれら関数用にドキュメントされた値の 1 つに 設定されることがあります。その他の場合 .Va errno は改変されません。 .Pp .Fn vfsload 関数は失敗すると非 0 値を、成功すると 0 を返します。 .Fn vfsload が失敗した場合、 .Xr kldload 2 用に記述された .Va errno 値が設定され得ます。 .Sh 関連項目 .Xr kldload 2 , .Xr mount 2 , .Xr mount 8 .Sh 作者 .An -nosplit このロード可能ファイルシステムサポートは、 .An Terry Lambert による汎用のロード可能カーネルモジュールサポートをベースに、 .An Garrett A. Wollman によって書かれました。 .Sh 歴史 .Fn getvfsent 関数ファミリは .Fx 2.0 ではじめて登場しました。