191 lines
4.1 KiB
Groff
191 lines
4.1 KiB
Groff
.\" %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$
|
|
.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
|
|
ではじめて登場しました。
|