G_CONSUMER(9) | FreeBSD Kernel Developer's Manual | G_CONSUMER(9) |
名称
g_new_consumer, g_destroy_consumer — GEOM コンシューマ (消費者) 管理書式
#include < geom/geom.h> struct g_consumer *
g_new_consumer( struct g_geom *gp);
void
g_destroy_consumer( struct g_consumer *cp);
解説
GEOM コンシューマ (消費者) は geom が別の GEOM プロバイダに接続して、I/O 要求が送信される裏口です。g_new_consumer() 関数は geom gp で新しいコンシューマを作成します。新しいコンシューマを使用する前に、それは、 g_attach(9) でプロバイダにアタッチされ、 g_access(9) でオープンされなければなりません。
g_destroy_consumer() 関数は与えられたコンシューマを破壊して、関連づけられたすべてのイベントを取り消します。この関数は求められていないコンシューマを kill する最終段階です。
制限/条件
g_new_consumer():- geom gp には、定義された orphan (親のない) メソッドがなければなりません。
- トポロジロックは保持されなければなりません。
g_destroy_consumer():
- コンシューマはプロバイダにアタッチされてはなりません。
- アクセスカウントは 0 でなければなりません。
- トポロジロックは保持されなければなりません。
戻り値
g_new_consumer() 関数は、新たに作成されたコンシューマへのポインタを返します。使用例
コンシューマを作成し、与えられたプロバイダにアタッチし、読み込みアクセスを獲得し、クリーンアップします。
void some_function(struct g_geom *mygeom, struct g_provider *pp) { struct g_consumer *cp; g_topology_assert(); /* 新しいコンシューマを 'mygeom' geom に作成します。*/ cp = g_new_consumer(mygeom); /* 新たに作成されたコンシューマを与えられたプロバイダに アタッチします。*/ if (g_attach(cp, pp) != 0) { g_destroy_consumer(cp); return; } /* 我々のコンシューマを通して読み込みむためにプロバイダを オープンします。*/ if (g_access(cp, 1, 0, 0) != 0) { g_detach(cp); g_destroy_consumer(cp); return; } g_topology_unlock(); /* * プロバイダから、データを読み込む。 */ g_topology_lock(); /* プロバイダ (リリースアクセスカウント) の接続を切ります。*/ g_access(cp, -1, 0, 0); /* プロバイダからデタッチします。*/ g_detach(cp); /* コンシューマを破壊する。*/ g_destroy_consumer(cp); }
関連項目
geom(4), DECLARE_GEOM_CLASS(9), g_access(9), g_attach(9), g_bio(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>によって書かれました。January 16, 2004 | FreeBSD |