VMSPLICE
Section: Linux Programmer's Manual (2)
Updated: 2006-04-28
Index
JM Home Page
roff page
名前
vmsplice - ユーザ・ページをパイプに継ぎ合わせる
書式
#define _GNU_SOURCE
#include <fcntl.h>
#include <sys/uio.h>
long vmsplice(int fd, const struct iovec *iov,
unsigned long nr_segs, unsigned int flags);
DESCRIPTION
vmsplice()
システムコールは、
iov
で指定されたユーザ・メモリの
nr_segs
の範囲をパイプにマッピングする。
fd
はパイプを参照していなければならない。
ポインタ
iov
は
iovec
構造体の配列を指す。
iovec
構造体は
<sys/uio.h>
で以下のように定義されている:
struct iovec {
void *iov_base; /* 開始アドレス */
size_t iov_len; /* バイト数 */
};
flags
引き数には、以下の値の 0 個以上をビット毎の論理和の形で指定する。
- SPLICE_F_MOVE
-
vmsplice()
では未使用。
splice(2)
参照。
- SPLICE_F_NONBLOCK
-
入出力で停止 (block) しない。詳細は
splice(2)
参照。
- SPLICE_F_MORE
-
現在のところ
vmsplice()
では何の効果もないが、将来的には実装される可能性がある。
splice(2)
参照。
- SPLICE_F_GIFT
-
ユーザ・ページがカーネルへ渡すもの (gift) であることを示す。
アプリケーションはこのメモリを絶対に変更してはならない。
さもなければ、ページキャッシュとディスク上のデータは
一致しなくなるだろう。
ページをカーネルに渡すと、この次の
splice(2)
SPLICE_F_MOVE
でそのページの移動を行うことができる。
このフラグが指定されなかった場合、この次の
splice(2)
SPLICE_F_MOVE
でそのページのコピーを行わなければならない。
データはメモリ上でページ境界にあっていなければならず、
長さもページ境界の倍数でなければならない。
返り値
成功して完了すると、
vmsplice()
はパイプに転送したバイト数を返す。
エラーの場合、
vmplice()
は -1 を返し、
errno
をエラーを示す値に設定する。
エラー
- EBADF
-
fd
が有効でない、もしくはパイプを参照していない。
- EINVAL
-
nr_segs
が 0 もしくは
IOV_MAX
よりも大きい。または
SPLICE_F_GIFT
が設定されたがメモリがページ境界にあっていない。
- ENOMEM
-
メモリ不足。
バージョン
vmsplice(2)
システムコールは Linux 2.6.17 で初めて登場した。
準拠
このシステムコールは Linux 固有である。
備考
指定されたセグメント数が上限に達した場合、
vmsplice()
は他のベクトル形式の read/write を行う関数と同じ動作をする。
上限は
IOV_MAX
であり、
<limits.h>
で定義されている。
このドキュメントを書いた時点での値は 1024 である。
関連項目
splice(2),
tee(2),
feature_test_macros(7)
Index
- 名前
-
- 書式
-
- DESCRIPTION
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- 備考
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:32:11 GMT, November 19, 2007