DECLARE_GEOM_CLASS(9) | FreeBSD Kernel Developer's Manual | DECLARE_GEOM_CLASS(9) |
名称
DECLARE_GEOM_CLASS — GEOM クラス宣言マクロ解説
DECLARE_GEOM_CLASS() マクロは GEOM に GEOM クラスを登録します。 GEOM のクラス自体は 1 つの特定の種類の変換を実装します。典型的な例は次の通りです: MBR ディスクパーティション、 BSD disklabel と RAID5 クラスです。 DECLARE_GEOM_CLASS() はコンパイルされて、 kld(4) モジュール GEOM クラスとしてロードするために使用することができます、そして、それはクラス登録のための唯一の公式な方法です。DECLARE_GEOM_CLASS() への引数は、次の通りです:
- class
- GEOM のクラスを説明する g_class 構造体。
- mod_name
- カーネルモジュール名 (クラス名でない!)。
構造体 g_class はクラスを説明するデータを含みます。それらは次の通りです:
- const char * name
- クラス名。
- g_taste_t * taste
-
テイスト (taste) イベント操作のために使用される関数へのポインタ。それが
NULL でないなら、それは 3 つの状況で呼び出されます:
- クラスの活性化のときに、すべての既存のプロバイダはテイスト (taste) を提供します。
- 新しいプロバイダを作成するとき、テイスト (taste) を提供します。
- プロバイダへの最後の書き込みアクセスがクローズされた後に、再テイスト (retaste) を提供します (最初に、書き込みオープンイベント“spoil”が送信されます)。
- g_config_t * config
- それ以上このフィールドを使用しないでください、機能的に ctlreq フィールドに取り替えられました。
- g_ctl_req_t * ctlreq
- ユーザランドアプリケーションから操作イベントのために使用される関数へのポインタ。
- g_init_t * init
- クラス登録直後に呼び出される関数へのポインタ。
- g_fini_t * fini
- クラスの登録取り消しの直前に呼び出される関数へのポインタ。
- g_ctl_destroy_geom_t * destroy_geom
- クラスのアンロードのときにあらゆる geom のために呼び出される関数へのポインタ。このフィールドが設定されていないなら、クラスをアンロードすることはできません。
name フィールドだけが必要です。残りはオプションです。
制限/条件
g_class のフィールドは、C99 スタイルフィールド指定 (下記の example_class の初期化を参照) を使用して常に初期化されるべきです。使用例
クラス宣言の例。
static struct g_geom * g_example_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) { g_topology_assert(); [...] } static void g_example_ctlreq(struct gctl_req *req, struct g_class *cp, char const *verb) { [...] } static int g_example_destroy_geom(struct gctl_req *req, struct g_class *cp, struct g_geom *gp) { g_topology_assert(); [...] } static void g_example_init(struct g_class *mp) { [...] } static void g_example_fini(struct g_class *mp) { [...] } struct g_class example_class = { .name = "EXAMPLE", .taste = g_example_taste, .ctlreq = g_example_ctlreq, .init = g_example_init, .fini = g_example_fini, .destroy_geom = g_example_destroy_geom }; DECLARE_GEOM_CLASS(example_class, g_example);
関連項目
geom(4), g_attach(9), g_bio(9), g_consumer(9), g_data(9), g_event(9), g_geom(9), g_provider(9), g_provider_by_name(9), g_wither_geom(9)作者
このマニュアルページは、 <pjd@FreeBSD.org>によって書かれました。August 13, 2007 | FreeBSD |