.\" %NetBSD: physio.9,v 1.2 1996/11/11 00:05:12 lukem Exp % .\" .\" Copyright (c) 1996 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Paul Kranenburg. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the NetBSD .\" Foundation, Inc. and its contributors. .\" 4. Neither the name of The NetBSD Foundation nor the names of its .\" contributors may be used to endorse or promote products derived .\" from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE .\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" .\" %FreeBSD: src/share/man/man9/physio.9,v 1.6.2.4 2001/12/17 11:30:18 ru Exp % .\" $FreeBSD$ .\" .Dd June 15, 1996 .Dt PHYSIO 9 .Os .Sh 名称 .Nm physio .Nd ロウデバイスの入出力の開始 .Sh 書式 .In sys/param.h .In sys/systm.h .In sys/buf.h .Ft int .Fn physio "dev_t dev" "struct uio *uio" "int ioflag" .Sh 解説 .Fn physio は通常、 文字型デバイスの read および write ルーチンから呼び出されるヘルパー関数で、 ユーザープロセスのバッファへの入出力を開始させます。 この関数は .Fa uio 構造体に記述されている転送が完了するまで、与えられた .Fa strategy ルーチンを 1 回以上呼び出します。 .Fa strategy を呼び出すごとの最大のデータ転送量は .Fa minphys ルーチンによって決定されます。 .Fa uio 構造体は通常ユーザー空間のアドレスを示すので、 .Fn physio はプロセスをメモリ中にロックする必要があります。 これは、プロセスに .Dv P_PHYSIO フラグをセットすることで行ないます。 以前にエラー状態が検出された時を除いて、 .Fn physio は常にリターンする前に全ての要求された転送が完了するまで待ちます。 全ての場合に、 .Fa bp に渡されるバッファは転送が完了するまでの期間中、ロック( .Dq busy にマーク)されます。 .Pp 引数の詳細を下記に示します。 .Bl -tag -width "strategy" .It Fa strategy それぞれのデータのかたまりをデバイスに入出力開始させるために呼ばれる デバイスの strategy ルーチン。 .It Fa bp strategy ルーチンで使用されるバッファ。 このバッファのフラグは strategy に渡される時に .Dv B_BUSY および .Dv B_PHYS がセットされます。 もし bp が .Dv NULL であれば、システムのプールから割り当てられます。 .It Fa dev デバイスを識別するために関連付けられたデバイス番号。 .It Fa flags 転送方向。 有効な設定は .Dv B_READ または .Dv B_WRITE のみ。 .It Fa minphys デバイスの strategy ルーチンが取り扱う事ができる最大の転送サイズを 決定するために呼ばれる、デバイス固有のルーチン。 .It Fa uio ユーザープロセスから要求された転送全体の記述。 現在は、 .Fa uio 構造体の .Sq uio_segflg フラグに .Dv UIO_USERSPACE 以外の値をセットして渡した場合の結果は未定義です。 .El .Sh 戻り値 成功すれば .Fn physio は 0 を返します。 .Fa uio 構造体に示されているアドレス範囲が要求したプロセスから アクセスできない場合には .Er EFAULT を返します。 .Fn physio はデバイスの strategy ルーチンを呼んだ結果として発生する あらゆるエラーを .Dv B_ERROR バッファフラグおよび .Va b_error フィールドを調査して返します。 デバイスが .Dq end of file の状態を示している時には、実際の転送サイズは .Fa uio 構造体で要求しているサイズよりも小さくなる事に注意してください。 .Sh 関連項目 .Xr read 2 , .Xr write 2