GETVFSENT(3) FreeBSD ライブラリ関数マニュアル GETVFSENT(3)
名称
getvfsent, setvfsent, endvfsent, vfsisloadable, vfsload − 仮想ファイルシ ステムモジュールを管理 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <sys/param.h> struct ovfsconf * |
getvfsent(void); void |
setvfsent(int cachelist); void |
endvfsent(void); int |
vfsisloadable(const char *name); int |
vfsload(const char *name); |
解説 |
getvfsent() 関数によって、カーネルが管理するインストール済の仮想ファイル システムモジュールのリストに、簡単にアクセスできます。リストのファイルシ ステムを 1 回に 1 つづつ段階的に処理します。利用できるデータがそれ以上な くなると、ヌルポインタが返ります。構造体 ‘‘struct ovfsconf’’ のフィールド は次のとおりです。 |
vfc_name
ファイルシステムの名前。 フラグは次のように定義されています: VFCF_STATIC setvfsent() および endvfsent() 関数は、 sysctl(3) によってカーネルからま とめて取得されるファイルシステムリストの、キャッシング制御に使用されま す。 setvfsent() の cachelist パラメータが 0 でなければ、これら検索関数の どれかを最初に呼び出した時点でリストはただ 1 回だけ取り出され、キャッシュ をクリアするために endvfsent() が呼び出されるまで保持されます。一般に setvfsent(1) は、 getvfsent() を使用するプログラムによって呼び出される必 要があり、 setvfsent(0) は (これもデフォルトの状態で)、 vfsload() 関数を 使用するプログラムによって呼び出される必要があります。 vfsisloadable() 関数は、後で vfsload(name) の呼び出しが続きそうだと非 0 値を返します。ここで ‘‘そう’’ と言うのは、 vfsisloadable() は vfsload() が成功するための条件をチェックしないからです。 vfsload() 関数は、ファイルシステム name の実装カーネルモジュールをロード しようと試みます。ファイルシステムモジュールを無事に突き止めてロードした 場合は 0 が、その他の場合は非 0 が返ります。この関数を呼び出せるのは次に 示す状況だけです。 1. getvfsbyname() を呼び出して非 0 値が返った場合。 2. vfsisloadable() を呼び出して非 0 値が返った場合。 mount_cd9660(8) のソースから取った使用例を次に示します。 struct vfsconf *vfc; /* ここにセットアップコードが入る */ error = getvfsbyname("cd9660", &vfc); |
if (vfsload("cd9660")) |
||||
err(EX_OSERR, "vfsload(cd9660)"); |
||||
endvfsent(); |
/* flush cache */ |
|||
error = getvfsbyname("cd9660", &vfc); |
} |
errx(1, "cd9660 filesystem is not available"); |
if (mount(vfc.vfc_name, dir, mntflags, &args) < 0) |
err(1, NULL); |
戻り値
getvfsent() ルーチンは、成功すると静的データ構造体のポインタを、失敗する とヌルポインタを返します。原因が sysctl(3) または malloc(3) で失敗した場 合は、 errno がそれら関数用にドキュメントされた値の 1 つに設定されること があります。その他の場合 errno は改変されません。 vfsload() 関数は失敗すると非 0 値を、成功すると 0 を返します。 vfsload() が失敗した場合、 kldload(2) 用に記述された errno 値が設定され得ます。 |
関連項目
作者
このロード可能ファイルシステムサポートは、 Terry Lambert による汎用のロー ド可能カーネルモジュールサポートをベースに、 Garrett A. Wollman によって 書かれました。 |
歴史
getvfsent() 関数ファミリは FreeBSD 2.0 ではじめて登場しました。 FreeBSD 10.0 September 24, 1994 FreeBSD 10.0 |