tail head cat sleep
QR code linking to this page

manページ  — GETVFSENT

名称

getvfsent, setvfsent, endvfsent, vfsisloadable, vfsload – 仮想ファイルシステムモジュールを管理

内容

ライブラリ

Standard C Library (libc, -lc)

書式

#include <sys/param.h>
#include <sys/mount.h>

struct ovfsconf *
getvfsent(void);

void
setvfsent(int cachelist);

void
endvfsent(void);

int
vfsisloadable(const char *name);

int
vfsload(const char *name);

解説

getvfsent() 関数によって、カーネルが管理するインストール済の仮想ファイルシステムモジュール のリストに、簡単にアクセスできます。リストのファイルシステムを 1 回に 1 つづつ段階的に処理します。利用できるデータがそれ以上なくなると、 ヌル ポインタが返ります。構造体 "struct ovfsconf" のフィールドは次のとおりです。

vfc_name ファイルシステムの名前。
vfc_index カーネルによって割り当てられ mount(2) の呼び出しに使用された、ファイルシステムのタイプ番号。
vfc_refcount このファイルシステムの参照数 (通常はマウント数ですが、 アンロードできないかカーネルに静的にリンクされている ファイルシステムでは、マウント数に 1 を加えたものになります)。
vfc_flags フラグビット。

フラグは次のように定義されています:

VFCF_STATIC カーネルに静的に組み込まれている
VFCF_NETWORK データをネットワーク経由で取得し得る
VFCF_READONLY 書き込みは未実装
VFCF_SYNTHETIC
  データは実ファイルを表現しない
VFCF_LOOPBACK マウント済みのファイルシステムに対する別名
VFCF_UNICODE ファイル名を Unicode で格納

setvfsent() および endvfsent() 関数は、 sysctl(3) によってカーネル からまとめて取得されるファイルシステムリストの、キャッシング制御に 使用されます。 setvfsent()cachelist パラメータが 0 でなければ、これら 検索関数のどれかを最初に呼び出した時点でリストはただ 1 回だけ取り出され、 キャッシュをクリアするために endvfsent() が呼び出されるまで保持されます。 一般に setvfsent(1) は、 getvfsent() を使用するプログラムによって呼び出される必要があり、 setvfsent() は (これもデフォルトの状態で)、 vfsload() 関数を使用するプログラムによって呼び出される必要があります。

vfsisloadable() 関数は、後で vfsload(name) の呼び出しが続きそうだと非 0 値を返します。ここで "そう" と言うのは、 vfsisloadable()vfsload() が成功するための条件をチェックしないからです。

vfsload() 関数は、ファイルシステム name の実装カーネルモジュールをロード しようと試みます。ファイルシステムモジュールを無事に突き止めてロードした 場合は 0 が、その他の場合は非 0 が返ります。この関数を呼び出せるのは次に 示す状況だけです。

  1. getvfsbyname() を呼び出して非 0 値が返った場合。
  2. vfsisloadable() を呼び出して非 0 値が返った場合。

mount_cd9660(8) のソースから取った使用例を次に示します。

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);

戻り値

getvfsent() ルーチンは、成功すると静的データ構造体のポインタを、失敗すると ヌル ポインタを返します。原因が sysctl(3) または malloc(3) で失敗した場合は、 errno がそれら関数用にドキュメントされた値の 1 つに 設定されることがあります。その他の場合 errno は改変されません。

vfsload() 関数は失敗すると非 0 値を、成功すると 0 を返します。 vfsload() が失敗した場合、 kldload(2) 用に記述された errno 値が設定され得ます。

関連項目

kldload(2), mount(2), mount(8)

作者

このロード可能ファイルシステムサポートは、 Terry Lambert による汎用のロード可能カーネルモジュールサポートをベースに、 Garrett A. Wollman によって書かれました。

歴史

getvfsent() 関数ファミリは FreeBSD 2.0 ではじめて登場しました。

GETVFSENT (3) September 24, 1994

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

Computer science would have progressed much further and faster if all of the time and effort that has been spent maintaining and nurturing Unix had been spent on a sounder operating system.
— The Unix Haters' handbook