GETVFSENT

Section: C Library Functions (3)
索引 jman

BSD mandoc
 

索引

名称

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

索引

ライブラリ

Lb libc  

索引

書式

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  

索引

解説

Fn 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 で格納

Fn setvfsent および Fn endvfsent 関数は、 sysctl(3) によってカーネル からまとめて取得されるファイルシステムリストの、キャッシング制御に 使用されます。 Fn setvfsent の Fa cachelist パラメータが 0 でなければ、これら 検索関数のどれかを最初に呼び出した時点でリストはただ 1 回だけ取り出され、 キャッシュをクリアするために Fn endvfsent が呼び出されるまで保持されます。 一般に Fn setvfsent 1 は、 Fn getvfsent を使用するプログラムによって呼び出される必要があり、 Fn setvfsent 0 は (これもデフォルトの状態で)、 Fn vfsload 関数を使用するプログラムによって呼び出される必要があります。

Fn vfsisloadable 関数は、後で Fn vfsload name の呼び出しが続きそうだと非 0 値を返します。ここで ``そう'' と言うのは、 Fn vfsisloadable は Fn vfsload が成功するための条件をチェックしないからです。

Fn vfsload 関数は、ファイルシステム Fa name の実装カーネルモジュールをロード しようと試みます。ファイルシステムモジュールを無事に突き止めてロードした 場合は 0 が、その他の場合は非 0 が返ります。この関数を呼び出せるのは次に 示す状況だけです。

  1. Fn getvfsbyname を呼び出して非 0 値が返った場合。
  2. Fn vfsisloadable を呼び出して非 0 値が返った場合。

mount_cd96608 のソースから取った使用例を次に示します。

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

 

索引

戻り値

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

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

索引

関連項目

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

索引

作者

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

索引

歴史

Fn getvfsent 関数ファミリは Fx 2.0 ではじめて登場しました。


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
関連項目
作者
歴史

jman



Time: 07:06:53 GMT, January 12, 2009