.\" %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.15.2.1 2005/01/05 08:31:19 krion Exp % .\" $FreeBSD$ .\" .Dd July 8, 2004 .Dt PHYSIO 9 .Os .Sh 名称 .Nm physio .Nd ロウデバイスの入出力の開始 .Sh 書式 .In sys/param.h .In sys/systm.h .In sys/bio.h .In sys/buf.h .Ft int .Fn physio "dev_t dev" "struct uio *uio" "int ioflag" .Sh 解説 .Fn physio は通常、 文字型デバイスの .Fn read および .Fn write ルーチンから呼び出されるヘルパー関数で、 ユーザプロセスのバッファへの入出力を開始させます。 呼び出しごとの最大のデータ転送量は .Fa dev->si_iosize_max によって決定されます。 .Fn physio の呼び出しは入出力要求を .Fn strategy 要求に変換し、その処理のため新しい要求をドライバの .Fn strategy ルーチンに渡します。 .Pp .Fa uio 構造体は通常ユーザ空間のアドレスを示すので、 .Fn physio はこれらのページをメモリ中にロックする必要があります。 これは適切なページに対する .Fn vmapbuf を呼び出すことで行われます。 以前にエラー状態が検出された時を除いて、 .Fn physio は常にリターンする前に全ての要求された転送が完了するまで待ちます。 .Pp 引数の詳細を下記に示します。 .Bl -tag -width indent .It Fa dev デバイスを識別するために関連付けられたデバイス番号。 .It Fa uio ユーザプロセスから要求された転送全体の記述。 現在は、 .Fa uio 構造体の .Va uio_segflg フラグに .Dv UIO_USERSPACE 以外の値をセットして渡した場合の結果は未定義です。 .It Fa ioflag .Fn physio を呼び出している .Fn read または .Fn write 関数からの ioflag 引数。 .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 .Sh 歴史 .Nm のマニュアルページは元々は .Nx のもので、 .Fx に適応させるために少しの変更があります。 .Pp .Nm の呼び出しは、より高い入出力およびページングのパフォーマンスのために、 完全に書き直されています。