aboutsummaryrefslogblamecommitdiff
path: root/ja_JP.eucJP/man/man3/getvfsent.3
blob: 0b1d4dd3aa66e7763c3d6b315eea576e0c588cfa (plain) (tree)
1
2
3
4
5
                                                               


                                                      
             



























































































































































































                                                                          
                          










































                                                            
.\"	%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
で最初に取り入れられました。