doc/ja_JP.eucJP/man/man3/getvfsent.3
Jun Kuriyama bc77f45bee Fix typo.
Submitted by:	kano@na.rim.or.jp
		(via SUZUKI Koichi <metal@gc5.so-net.ne.jp>)
2004-03-23 13:39:31 +00:00

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
ではじめて登場しました。