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>
237 lines
4.8 KiB
Groff
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
|
|
で最初に取り入れられました。
|