日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
G_BIO(9) FreeBSD カーネル開発者マニュアル G_BIO(9)
名称
g_new_bio, g_clone_bio, g_destroy_bio, g_format_bio, g_print_bio,
g_reset_bio -- GEOM bio 制御関数
書式
#include <sys/bio.h>
#include <geom/geom.h>
struct bio *
g_new_bio(void);
struct bio *
g_alloc_bio(void);
struct bio *
g_clone_bio(struct bio *bp);
struct bio *
g_duplicate_bio(struct bio *bp);
void
g_destroy_bio(struct bio *bp);
void
g_format_bio(struct sbuf *sb, const struct bio *bp);
void
g_print_bio(struct sbuf *sb, const char *prefix, const struct bio *bp,
const char *fmtsuffix, ...);
void
g_reset_bio(struct bio *bp);
解説
struct bio は I/O 要求を表現するために GEOM によって使用され、最も重要な
フィールドは次で説明されます:
bio_cmd I/O 要求コマンド。GEOM で利用可能な 5 つの I/O 要求があり
ます:
BIO_READ 読み込み要求。
BIO_WRITE 書き込み要求。
BIO_DELETE 特定の範囲のデータがもう使用されないで、基本
的な技術サポートとして、それを消すか、または
解放することができることを示します。関連ブ
ロックを消すように準備することができ、暗号デ
バイスが攻撃に利用可能なデータの量を減少させ
るための範囲にランダムビットを満たしたいかも
しれません。
BIO_GETATTR 特定のプロバイダかパスで帯域外の属性を検査し
て操作します。属性は、ASCII 文字列によって名
前が付けられ bio_attribute フィールドに格納さ
れます。
BIO_FLUSH それらの書き込みキャッシュをフラッシュするた
めに基本的なプロバイダに伝えます。
bio_flags 利用可能なフラグは次の通りです:
BIO_ERROR 要求は失敗しました (エラー値は bio_error フィー
ルドに格納されます)。
BIO_DONE 要求は終了しました。
bio_cflags コンシューマ (消費者) によってプライベートに使用。
bio_pflags プロバイダによってプライベートに使用。
bio_offset プロバイダへのオフセット。
bio_data データバッファへのポインタ。
bio_error BIO_ERROR が設定されるときのエラー値。
bio_done 要求が終了するときに呼び出される関数へのポインタ。
bio_driver1 プロバイダによってプライベートに使用。
bio_driver2 プロバイダによってプライベートに使用。
bio_caller1 コンシューマによってプライベートに使用。
bio_caller2 コンシューマによってプライベートに使用。
bio_attribute BIO_GETATTR 要求のための属性文字列。
bio_from (bio_to フィールド (クラスでは通常読み込み専用) に格納され
たプロバイダにアタッチされた) 要求を使用するコンシューマ。
bio_to 宛先プロバイダ (クラスでは通常読み込み専用)。
bio_length バイト単位の要の長さ。
bio_completed 要求の前部から完了する必要はありませんが、完了したバイト
数。
bio_children bio クローン (クラスでは通常読み込み専用) の数。
bio_inbed 終了した bio クローンの数。
bio_parent 親の bio へのポインタ。
g_new_bio() 関数は新しく、空の bio 構造体を割り付けます。
g_alloc_bio() - g_new_bio() と同じですが、常に成功します (M_WAITOK malloc
フラグで bio を割り付け)。
g_clone_bio() 関数は、新しい bio 構造体を割り付けて、クローンへの引数とし
て与えられた bio から次のフィールドをコピーします: bio_cmd, bio_length,
bio_offset, bio_data, bio_attribute。クローンでのフィールド bio_parent は
渡された bio を指し、渡された bio でフィールド bio_children は増加されま
す。
この関数は特定の geom のプロバイダを通して入るあらゆる要求に使用されるべ
きです、そして、スケジュールされる必要性は減ります。適切な順序は次の通り
です:
1. 受信された struct bio のクローンです。
2. クローンを修正します。
3. それ自体のコンシューマでクローンをスケジュールします。
g_duplicate_bio() - g_clone_bio() と同じですが、常に成功します (M_WAITOK
malloc フラグで bio を割り付け)。
g_destroy_bio() 関数は、与えられた bio 構造体の割り付けを解放して、破壊し
ます。
g_format_bio() 関数は、与えられた bio 構造体に関する情報を提供された sbuf
に、印刷 (表示) します。
g_print_bio() 関数は、デバッグ目的のために使用することができる
g_format_bio() のまわりの便利なラッパです。それは、提供された prefix 文字
列を印刷 (表示) し、書式化された bio が続き、9(printf) のスタイルで
fmtsuffix が続きます。接頭辞または接尾辞文字列のいずれかは、空の文字列で
あるかもしれません。g_print_bio() は、行の終わりで常に改行文字を印刷 (表
示) します。
g_reset_bio() 関数は、与えられた bio 構造体をその初期状態に戻すようにリ
セットします。g_reset_bio() は、すべてのユーザの可視フィールドをそれらの
初期の値に設定する間に、内部のデータ構造を保存します。複数のトランザク
ションのために、g_new_bio(), g_alloc_bio(), g_clone_bio() または
g_duplicate_bio() から取得される bio を再利用するとき、g_reset_bio() は、
bzero() の代わりにトランザクションの間で呼び出されなければなりません。他
の手段によって作成された bio 構造のために厳密に必要ではありませんが、
g_reset_bio() は、トランザクションの間に、それを初期設定するために使用さ
れるべきです。
戻り値
g_new_bio() と g_clone_bio() 関数は割り付けられた bio へのポインタを返す
か、またはエラーが起こったなら、NULL を返します。
使用例
``NULL-変換'' の実装は I/O 要求はクローンされ、少しの変更なしでスケジュー
ルが減ることを意味します。構造体 example_softc のフィールド ex_consumer
が操作したいと望んでいるプロバイダにアタッチされたコンシューマを含んでい
ると仮定しましょう。
void
example_start(struct bio *bp)
{
struct example_softc *sc;
struct bio *cbp;
g_print_bio("Request received: ", bp, "");
sc = bp->bio_to->geom->softc;
if (sc == NULL) {
g_io_deliver(bp, ENXIO);
return;
}
/* 我々の bio 要求をクローンにする. */
cbp = g_clone_bio(bp);
if (cbp == NULL) {
g_io_deliver(bp, ENOMEM);
return;
}
cbp->bio_done = g_std_done; /* 標準の 'done' 関数. */
/* OK, そのスケジュールを降ろします. */
/*
* コンシューマは, 我々の geom に 1 つのみあるなら, 同様に
* LIST_FIRST(&bp->bio_to->geom->consumer) から
* 取得することができます.
*/
g_io_request(cbp, sc->ex_consumer);
}
関連項目
geom(4), DECLARE_GEOM_CLASS(9), g_access(9), g_attach(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)
作者
このマニュアルページは、Pawel Jakub Dawidek <pjd@FreeBSD.org> によって書
かれました。
FreeBSD 13.2 August 7, 2019 FreeBSD 13.2