日本語 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
CAM(3) FreeBSD ライブラリ関数マニュアル CAM(3) 名称 cam_open_device, cam_open_spec_device, cam_open_btl, cam_open_pass, cam_close_device, cam_close_spec_device, cam_getccb, cam_send_ccb, cam_freeccb, cam_path_string, cam_device_dup, cam_device_copy, cam_get_device -- CAM ユーザライブラリ ライブラリ 共通アクセスメソッドユーザライブラリ (libcam, -lcam) 書式 #include <stdio.h> #include <camlib.h> struct cam_device * cam_open_device(const char *path, int flags); struct cam_device * cam_open_spec_device(const char *dev_name, int unit, int flags, struct cam_device *device); struct cam_device * cam_open_btl(path_id_t path_id, target_id_t target_id, lun_id_t target_lun, int flags, struct cam_device *device); struct cam_device * cam_open_pass(const char *path, int flags, struct cam_device *device); void cam_close_device(struct cam_device *dev); void cam_close_spec_device(struct cam_device *dev); union ccb * cam_getccb(struct cam_device *dev); int cam_send_ccb(struct cam_device *device, union ccb *ccb); void cam_freeccb(union ccb *ccb); char * cam_path_string(struct cam_device *dev, char *str, int len); struct cam_device * cam_device_dup(struct cam_device *device); void cam_device_copy(struct cam_device *src, struct cam_device *dst); int cam_get_device(const char *path, char *dev_name, int devnamelen, int *unit); 解説 CAM ライブラリは、CAM サブシステムでプログラミングを援助するように設計さ れた多くの関数から成ります。このマニュアルページは、ライブラリ関数の基本 セットを取り上げています。より多くの関数は、以下にリストされたマニュアル ページに文書化されています。 CAM ライブラリ関数の多くは、cam_device 構造体を使用します: struct cam_device { char device_path[MAXPATHLEN+1];/* * ユーザから与えられた * デバイスのパス名. * ユーザがデバイス名と * ユニット番号を別々に * 提示するなら, これは, * NULL となります. */ char given_dev_name[DEV_IDLEN+1];/* * ユーザによって与え * られたデバイス名. */ uint32_t given_unit_number; /* * ユーザによって与え * られたユニット番号. */ char device_name[DEV_IDLEN+1];/* * デバイスの名前, * 例えば, 'pass' */ uint32_t dev_unit_num; /* この特定のデバイスに関連する * パススルーデバイスのユニット * 番号. */ char sim_name[SIM_IDLEN+1];/* * コントローラの名前, * 例えば, 'ahc' */ uint32_t sim_unit_number; /* コントローラのユニット番号 */ uint32_t bus_id; /* コントローラのバス番号 */ lun_id_t target_lun; /* 論理ユニット番号 */ target_id_t target_id; /* ターゲット ID */ path_id_t path_id; /* システム SCSI バス番号 */ uint16_t pd_type; /* 周辺デバイスのタイプ */ struct scsi_inquiry_data inq_data; /* SCSI 問い合わせデータ */ uint8_t serial_num[252]; /* デバイスシリアル番号 */ uint8_t serial_num_len; /* シリアル番号の長さ */ uint8_t sync_period; /* 交渉された同期周期 */ uint8_t sync_offset; /* 交渉された同期オフセット */ uint8_t bus_width; /* 交渉されたバス幅 */ int fd; /* デバイスのためのファイル記述子 */ }; cam_open_device() は、オープンするデバイスを記述する文字列と open(2) に渡 すために適切な flags を引数として取ります。渡される "パス" は、実際にオー プンされるデバイス名とユニット番号を含んでいるほとんどあらゆるタイプの文 字列となります。文字列は、デバイス名とユニット番号に cam_get_device() に よって解析されます。いったんデバイス名とユニット番号が決定されると、与え られたデバイスに対応するパススルーデバイスを決定するために、検索が実行さ れます。 cam_open_spec_device() は、渡されるデバイス名とユニット番号に対応する pass(4) デバイスをオープンします。flags は、open(2) に渡すのに適切なフラ グであるべきです。device 引数は、オプションです。ユーザは、cam_device 構 造体のためにあらかじめ割り付けられた空間を供給します。device 引数が NULL であるなら、cam_open_spec_device() は、malloc(3) を使用して cam_device 構 造体のための空間を割り付けます。 cam_open_btl() は、SCSI バスを取りますが、引数としてデバイス名とユニット 番号の代わりにターゲットと論理ユニットを取ることを除いて、 cam_open_spec_device() に似ています。path_id 引数は、SCSI バス番号の CAM 同等物です。それは、システムの論理的なバス番号を表しています。flags は、 open(2) に渡すために適切なフラグであるべきです。cam_open_spec_device() と 同様に、device 引数は、オプションです。 cam_open_pass() は、オープンする pass(4) デバイスの path を引数として取り ます。変換または検索が、実行されないので、渡されるパスは、CAM pass(4) デ バイスのそれでなければなりません。flags は、open(2) に渡すために適切なフ ラグであるべきです。device 引数は、ユーザが cam_device 構造体のために CAM ライブラリを空間を割り付けたいなら、cam_open_spec_device() と cam_open_btl() と同様に、NULL であるべきです。cam_close_device() は、上記 の open() 呼び出しの 1 つによって割り付けられた cam_device 構造体を解放 し、パススルーデバイスへのファイル記述子をクローズします。ユーザが cam_device 構造体のための空間を割り付けたなら、このルーチンを、呼び出すべ きではありません。代わりに、ユーザは、cam_close_spec_device() を呼び出す べきです。 cam_close_spec_device() は、上記で説明された open() ルーチンの 1 つでオー プンされたファイル記述子を単にクローズします。CAM ライブラリでなく、 cam_device 構造体が呼び出し側によって割り付けられたとき、この関数を呼び出 すべきです。 cam_getccb() は、calloc(3) を使用して前もって 0 クリアされた CCB を割り付 けて、cam_device 構造体の値を使用して CCB ヘッダのフィールドを設定しま す。 cam_send_ccb() は、与えられた ccb を、cam_device 構造体で記述された device に送信します。 cam_freeccb() は、cam_getccb() によって割り付けられた CCB を解放します。 ccb が NULL であるなら、アクションは、取られません。 cam_path_string() は、cam_device 構造体と長さ len がある文字列を引数とし て取ります。それは、カーネルによって使用されたものに似たコロンで終了する 印刷接頭辞文字列を作成します。例えば: "(cd0:ahc1:0:4:0): "。 cam_path_string() は、多くても len-1 文字を str に置きます。len 番目の文 字は、終端の `\0' です。 cam_device_dup() は、strdup(3) に似た方法で動作します。それは、cam_device 構造体のために空間を割り付けて、新しく割り付けられた構造体に、渡された device 構造体の内容をコピーします。 cam_device_copy() は、dst. に src 構造体をコピーします。 cam_get_device() は、ユニット番号が続いているデバイス名で文字列を含んでい る path 引数を取ります。次に、それは、文字列をデバイス名とユニット番号に 分解し、それらを、それぞれ、dev_name と unit に戻します。cam_get_device() は、少なくとも次の形式の文字列を処理することができます: /dev/foo1 foo0 nsa2 cam_get_device() は、cam_open_device() に似た機能を提供する必要があるアプ リケーションのための便利な関数として提供されています。 戻り値 cam_open_device(), cam_open_spec_device(), cam_open_btl() と cam_open_pass() は、cam_device 構造体へのポインタを返し、エラーがあったな ら、NULL を返します。 cam_getccb() は、割り付けられ、部分的に初期化された CCB を返し、CCB の割 り付けが失敗したなら、NULL を返します。 cam_send_ccb() は、エラーが起こったなら、-1 の値を返し、errno は、エラー を示す値に設定されます。 cam_path_string() は、便利なものとして、満たされた印刷接頭辞文字列を返し ます。これは、cam_path_string() に渡されるものと同じ str です。 cam_device_dup() は、渡された device のコピーを返し、エラーの起こったな ら、NULL を返します。 cam_get_device() は、成功すれば、0 を返し、失敗したことを示すために -1 を 返します。 エラーが、ここで説明された基本的な CAM ライブラリ関数の 1 つから返される なら、エラーの理由は、一般的に、CAM_ERRBUF_SIZE 文字の長さである、グロー バル文字列 cam_errbuf で印刷 (表示) されます。 関連項目 cam_cdbparse(3), pass(4), camcontrol(8) 歴史 CAM ライブラリは、FreeBSD 3.0 ではじめて登場しました。 作者 Kenneth Merry <ken@FreeBSD.org> バグ cam_open_device() は、渡された path が何かへのシンボリックリンクであるか どうか確かめるためのチェックしません。また、渡された path が実際の pass(4) デバイスであるかどうか確かめるためのチェックしません。前者は、実 装するのがだいぶ容易ですが、後者は、デバイスノードを pass(4) デバイスとし て識別する最終的な方法を必要とします。 場合により、関数のいくつかは、誤って名前が付けられるか、または不完全に名 前が付けられます。 FreeBSD 13.2 November 23, 2020 FreeBSD 13.2