EN JA
G_CONSUMER(9)
G_CONSUMER(9) FreeBSD Kernel Developer's Manual G_CONSUMER(9)

名称

g_new_consumer, g_destroy_consumerGEOM コンシューマ (消費者) 管理

書式

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

作者

このマニュアルページは、 Pawel Jakub Dawidek <pjd@FreeBSD.org>によって書かれました。
January 16, 2004 FreeBSD