Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
vmsplice - ユーザーページをパイプに継ぎ合わせる
書式
#define _GNU_SOURCE /* feature_test_macros(7) 参照 */ #include <fcntl.h> #include <sys/uio.h> ssize_t vmsplice(int fd, const struct iovec *iov, unsigned long nr_segs, unsigned int flags);
説明
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 をエラーを示す値に設定する。
エラー
EAGAIN SPLICE_F_NONBLOCK が flags に指定されていて、かつ操作が停止するような状態であった。 EBADF fd が有効でない、もしくはパイプを参照していない。 EINVAL nr_segs が IOV_MAX よりも大きい。または SPLICE_F_GIFT が設定されたがメモリーがペー ジ境界にあっていない。 ENOMEM メモリー不足。
バージョン
vmsplice() システムコールは Linux 2.6.17 で初めて登場した。 ライブラリによるサポートは glibc バージョン 2.5 で追加された。
準拠
このシステムコールは Linux 固有である。
注意
指定されたセグメント数が上限に達した場合、 vmsplice() は他のベクトル形式の read/write を 行う関数と同じ動作をする。 上限は IOV_MAX であり、 <limits.h> で定義されている。 このド キュメントを書いた時点での値は 1024 である。
関連項目
splice(2), tee(2)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。