スポンサーリンク

GETVFSENT(3) FreeBSD ライブラリ関数マニュアル GETVFSENT(3)

名称

getvfsent, setvfsent, endvfsent, vfsisloadable, vfsload − 仮想ファイルシ ステムモジュールを管理

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/param.h>
#include <sys/mount.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

ファイルシステムの名前。
vfc_index
カーネルによって割り当てられ mount(2) の呼び出しに使用され た、ファイルシステムのタイプ番号。
vfc_refcount
このファイルシステムの参照数 (通常はマウント数ですが、アン ロードできないかカーネルに静的にリンクされているファイルシ ステムでは、マウント数に 1 を加えたものになります)。
vfc_flags
フラグビット。

フラグは次のように定義されています:

VFCF_STATIC
カーネルに静的に組み込まれている
VFCF_NETWORK
データをネットワーク経由で取得し得る
VFCF_READONLY
書き込みは未実装
VFCF_SYNTHETIC
データは実ファイルを表現しない
VFCF_LOOPBACK
マウント済みのファイルシステムに対する別名
VFCF_UNICODE
ファイル名を Unicode で格納

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;
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);

戻り値

getvfsent() ルーチンは、成功すると静的データ構造体のポインタを、失敗する とヌルポインタを返します。原因が sysctl(3) または malloc(3) で失敗した場 合は、 errno がそれら関数用にドキュメントされた値の 1 つに設定されること があります。その他の場合 errno は改変されません。

vfsload() 関数は失敗すると非 0 値を、成功すると 0 を返します。 vfsload() が失敗した場合、 kldload(2) 用に記述された errno 値が設定され得ます。

関連項目

kldload(2), mount(2), mount(8)

作者

このロード可能ファイルシステムサポートは、 Terry Lambert による汎用のロー ド可能カーネルモジュールサポートをベースに、 Garrett A. Wollman によって 書かれました。

歴史

getvfsent() 関数ファミリは FreeBSD 2.0 ではじめて登場しました。

FreeBSD 10.0 September 24, 1994 FreeBSD 10.0

スポンサーリンク