UIOMOVE(9) NetBSD Kernel Developer's Manual UIOMOVE(9) 名称 uiomove -- struct uio で記述されたデータの移動 書式 #include int uiomove(void *buf, size_t n, struct uio *uio); 解説 uiomove 関数は、buf で示されたカーネル空間アドレスと、uio で表さ れたアドレス(ユーザ空間でもカーネル空間でもよい)の間で、最大 n バ イトをコピーします。 引数 uio は uio 構造体へのポインタです。uio 構造体は で次のように宣言されています。 struct uio { struct iovec *uio_iov; /* pointer to array of iovecs */ int uio_iovcnt; /* number of iovecs in array */ off_t uio_offset; /* offset into file this uio corresponds to */ size_t uio_resid; /* residual i/o count */ enum uio_seg uio_segflg; enum uio_rw uio_rw; struct proc *uio_procp;/* process if UIO_USERSPACE */ }; uio 構造体は一般に転送過程ののデータを表します。以下で説明するフィー ルドのいくつかは、その過程の状況を示します。 uio_iov iovec 構造体配列へのポインタ: struct iovec { void *iov_base; /* ベースアドレス */ size_t iov_len; /* 長さ */ }; uio_iovcnt iovec 配列の要素数 uio_offset 対応するオブジェクトへのオフセット uio_resid この構造体によって表されるスペースの量。 概念的には、転送される残りのデータの量。 uio_segflg スペースの所在を示すフラグ。ユーザ空間なら USERSPACE、 カーネル空間なら SYSSPACE。 uio_rw 転送方向を示すフラグ。スペースへの read 動作なら UIO_READ、 スペースからの write 動作なら UIO_WRITE。 uio_procp この構造体によって表されるデータエリアを所有するプロ セスの proc 構造体へのポインタ。エリアがカーネル空間 の場合は NULL。 uio->uio_rw の値は、uiomove が buf から uio へコピーするのか、そ れとも逆方向かを制御します。 n と uio->uio_resid の小さい方のバイト数がコピーされます。 uiomove は uio によって参照される構造体のフィールドを変更します。 uio->uio_resid は転送したデータの分だけ減少させ、uio->uio_offset は同じ量だけ増加させます。iovec 配列等のポインタも、指示された領 域を示すよう調整されます。これにより、データを一杯にする/空にする ために、uiomove を繰り返し呼び出すことが簡単に行えます。 戻り値 uiomove は成功なら 0 を返し、不正なアドレスがあった場合は EFAULT を返します。 関連項目 copy(9), fetch(9), store(9) NetBSD 3.1 February 12, 1999 NetBSD 3.1 $Id: uiomove.0,v 1.3 2007/07/12 02:49:48 candy Exp candy $