doc/ja_JP.eucJP/man/man3/getvfsent.3
Kazuo Horikawa cb5d1a9147 Replace jpman project specific RCS keyword with $FreeBSD.
jpman project specific RCS keyword (jpman %Id) is obsolete,
after manual entries are stored in freefall CVS repository.
This old Id is useless and more worse it confuses users and bug reporters.
So, this old Id is removed.

Submitted by:jpman project <man-jp@jp.FreeBSD.org>
2001-05-14 01:10:24 +00:00

237 lines
4.8 KiB
Groff

.\" %Id: getvfsent.3,v 1.14 1998/05/30 18:20:37 steve 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 書式
.Fd #include <sys/param.h>
.Fd #include <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 つづつ段階的に処理します。利用できるデータがそれ以上なくなると、
null
ポインタが返ります。構造体
.Dq Li struct ovfsconf
のフィールドは次のとおりです。
.Pp
.Bl -tag -compact -width vfc_refcount
.It vfc_name
ファイルシステムの名前。
.It vfc_index
カーネルによって割り当てられ
.Xr mount 2
の呼び出しに使用された、ファイルシステムのタイプ番号。
.It vfc_refcount
このファイルシステムの参照数
(通常は実装数ですが、
アンロードできないファイルシステム、または静的にこのカーネルにリンク
されているファイルシステムなどがあると、実装数を上回ります)
.It vfc_flags
現在なにも定義されていないフラグビット。
.El
.Pp
.Fn setvfsent
および
.Fn endvfsent
関数は、
.Xr sysctl 3
のよってカーネル
からまとめて取得されるファイルシステムリストの、キャッシング制御に
使用されます。
.Fn setvfsent
.Fa cachelist
パラメータがゼロでなければ、これら
検索関数のどれかを最初に呼び出した時点でリストはただ
1 回だけ取り出され、
キャッシュをクリアするために
.Fn endvfsent
が呼び出されるまで保持されます。
一般に
.Fn setvfsent 1
は、
.Fn getvfsent
を使用するプログラムによって呼び出される必要があり、
.Fn setvfsent 0
(これもデフォルトの状態で)
.Fn vfsload
関数を使用するプログラムによって呼び出される必要があります。
.Pp
.Fn vfsisloadable
関数は、後で
.Fn vfsload name
の呼び出しが続きそうだと非ゼロ値を返します。ここで
「そう」と言うのは、
.Fn vfsisloadable
によってチェックされる条件だけが、
.Fn vfsload
が後続するために必要な条件の小さな
サブセットだからです。詳しく説明すれば、
.Fn vfsisloadable
.Pa /dev/lkm
存在するか、書き込みのためにオープンできるか、また
LKM
(ロード可能カーネルモジュール)
用に指定したディレクトリの
1 つで、
.Pa Ns Fa name Ns _mod.o
見付かるかなどをチェックします。
.Pp
.Fn vfsload
関数は、ファイルシステム
.Fa name
の実装カーネルモジュールをロード
しようと試みます。ファイルシステムモジュールを無事に突き止めてロードした
場合はゼロが、その他の場合は非ゼロが返ります。この関数を呼び出せるのは次に
示す状況だけです。
.Bl -enum
.It
.Fn getvfsbyname
を呼び出して非ゼロ値が返った場合。
.It
.Fn vfsisloadable
を呼び出して非ゼロ値が返った場合。
.It
十分な一時ファイル空間が利用でき、
.No Ns \&${ Ns Ev TMPDIR Ns \&}
.Pa /var/tmp
または
.Pa /tmp
1 つに
書き込みもできる場合。
.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
ルーチンは、成功すると静的データ構造体のポインタを、失敗すると
null
ポインタを返します。原因が
.Xr sysctl 3
または
.Xr malloc 3
で失敗した場合は、
.Va errno
がそれら関数用にドキュメントされた値の
1 つに
設定されることがあります。その他の場合
.Va errno
は改変されません。
.Pp
.Fn vfsload
関数は失敗すると非ゼロ値を、成功するとゼロを返します。
.Fn vfsload
が失敗した場合、
.Va errno
がフォーク
.Xr fork 2
.Xr waitpid 2
.Xr chdir 2
または
.Xr execlp 3
用としてドキュメントされた値の
1 つに設定されるか、または、
現在特に有用ではないにしても結局は便利な
.Xr modload 8
プログラムの、
ステータスを返す可能性があります。さらに、もし
.Xr modload 8
がシグナルで終了した場合、
.Fn vfsload
は失敗し
.Va errno
.Er EINVAL
に設定します。
.Sh 環境変数
.Bl -tag -compact -width TMPDIRx
.It Ev TMPDIR
.Fn vfsload
に代わって
.Xr modload 8
によって作成された一時ファイルの位置。
.It Ev LKMDIR
ロード可能モジュールを検索する
.Fn vfsisloadable
および
.Fn vfsload
用の代替ディレクトリ。
.Sh 関連項目
.Xr mount 2
.Xr modload 8
.Xr mount 8
.Sh バグ
.Xr modload 8
コマンドの戻り値は、
.Va errno
値として解釈する場合
(もっと言えば、ほかのどんなものとして解釈する場合も)、
特に有用ではありません。
.Sh 作者
このロード可能ファイルシステムサポートは、
.An Terry Lambert
による汎用のロード可能カーネルモジュールサポートをベースに、
.An Garrett A. Wollman
によって書かれました。
.Sh 歴史
.Fn getvfsent
関数ファミリは
.Fx 2.0
で最初に取り入れられました。