名 前
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) 参 照 。
入 出 力 で 停 止 (block) し な い 。 詳 細 は splice(2) 参 照 。
現 在 の と こ ろ vmsplice() で は 何 の 効 果 も な い が 、 将 来 的 に は 実 装 さ れ る 可 能 性 が あ る 。 splice(2) 参 照 。 ユ ー ザ ー ペ ー ジ が カ ー ネ ル へ 渡 す も の (gift) で あ る こ と を 示 す 。 ア プ リ ケ ー シ ョ ン は こ の メ モ リ ー を 絶 対 に 変 更 し て は な ら な い 。 さ も な け れ ば 、 ペ ー ジ キ ャ ッ シ ュ と デ ィ ス ク 上 の デ ー タ は 一 致 し な く な る だ ろ う 。 ペ ー ジ を カ ー ネ ル に 渡 す と 、 こ の 次 の splice(2) SPLICE_F_MOVE で そ の ペ ー ジ の 移 動 を 行 う こ と が で き る 。 こ の フ ラ グ が 指 定 さ れ な か っ た 場 合 、 こ の 次 の splice(2) SPLICE_F_MOVE で そ の ペ ー ジ の コ ピ ー を 行 わ な け れ ば な ら な い 。 デ ー タ は メ モ リ ー 上 で ペ ー ジ 境 界 に あ っ て い な け れ ば な ら ず 、 長 さ も ペ ー ジ 境 界 の 倍 数 で な け れ ば な ら な い 。 返 り 値成 功 し て 完 了 す る と 、 vmsplice() は パ イ プ に 転 送 し た バ イ ト 数 を 返 す 。 エ ラ ー の 場 合 、 vmplice() は −1 を 返 し 、 errno を エ ラ ー を 示 す 値 に 設 定 す る 。 エ ラ ー
メ モ リ ー 不 足 。
|