physio(9) FreeBSD 一般コマンドマニュアル

physio

前のページ 上に戻る 次のページ

physio


     #include <sys/systm.h>
     #include <sys/buf.h>

     int
     physio(dev_t dev, struct uio *uio, int ioflag);


解説

     physio() は通常、文字型デバイスの read および write ルーチンから呼び出さ
     れるヘルパー関数で、ユーザープロセスのバッファへの入出力を開始させます。
     この関数は uio 構造体に記述されている転送が完了するまで、与えられた
     strategy ルーチンを 1 回以上呼び出します。 strategy を呼び出すごとの最大
     のデータ転送量は minphys ルーチンによって決定されます。 uio 構造体は通常
     ユーザー空間のアドレスを示すので、 physio() はプロセスをメモリ中にロック
     する必要があります。これは、プロセスに P_PHYSIO フラグをセットすることで
     行ないます。以前にエラー状態が検出された時を除いて、 physio() は常にリタ
     ーンする前に全ての要求された転送が完了するまで待ちます。全ての場合に、 bp
     に渡されるバッファは転送が完了するまでの期間中、ロック( ``busy'' にマー
     ク)されます。

     引数の詳細を下記に示します。

     strategy  それぞれのデータのかたまりをデバイスに入出力開始させるために呼
               ばれるデバイスの strategy ルーチン。

     bp        strategy ルーチンで使用されるバッファ。このバッファのフラグは
               strategy に渡される時に B_BUSY および B_PHYS がセットされます。
               もし bp が NULL であれば、システムのプールから割り当てられま
               す。

     dev       デバイスを識別するために関連付けられたデバイス番号。

     flags     転送方向。有効な設定は B_READ または B_WRITE のみ。

     minphys   デバイスの strategy ルーチンが取り扱う事ができる最大の転送サイ
               ズを決定するために呼ばれる、デバイス固有のルーチン。

     uio       ユーザープロセスから要求された転送全体の記述。現在は、 uio 構造
               体の `uio_segflg' フラグに UIO_USERSPACE 以外の値をセットして渡
               した場合の結果は未定義です。


戻り値

     成功すれば physio() は 0 を返します。 uio 構造体に示されているアドレス範
     囲が要求したプロセスからアクセスできない場合には EFAULT を返します。
     physio() はデバイスの strategy ルーチンを呼んだ結果として発生するあらゆる
     エラーを B_ERROR バッファフラグおよび b_error フィールドを調査して返しま
     す。デバイスが ``end of file'' の状態を示している時には、実際の転送サイズ
     は uio 構造体で要求しているサイズよりも小さくなる事に注意してください。


関連項目

     read(2), write(2)

FreeBSD 4.4                      June 15, 1996                     FreeBSD 4.4

ABELNET VPSサービス