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 はパイプを参照していなければならない。

ポインタ ioviovec 構造体の配列を指す。 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