Man page - vmsplice(2)

Packages contains this manual

Available languages:

en fr pl ja ru ro

Manual

VMSPLICE

名 前
書 式
説 明
返 り 値
エ ラ ー
バ ー ジ ョ ン
準 拠
注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

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 );

説 明

If fd is opened for writing, the vmsplice () system call maps nr_segs ranges of user memory described by iov into a pipe. If fd is opened for reading, the vmsplice () system call fills nr_segs ranges of user memory described by iov from a pipe. The file descriptor fd must refer to a pipe.

ポ イ ン タ ー 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 で あ る 。

vmsplice () really supports true splicing only from user memory to a pipe. In the opposite direction, it actually just copies the data to userspace. But this makes the interface nice and symmetric and enables people to build on vmsplice () with room for future improvement in performance.

関 連 項 目

splice (2), tee (2), pipe (7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。