名 前
tee − パ イ プ の 中 身 を 複 製 す る
書 式
#define
_GNU_SOURCE /* feature_test_macros(7) 参 照
*/
#include <fcntl.h>
ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);
説 明
tee() は 、 フ ァ イ ル デ ィ ス ク リ プ タ ー fd_in が 参 照 す る パ イ プ か ら フ ァ イ ル デ ィ ス ク リ プ タ ー fd_out が 参 照 す る パ イ プ へ 最 大 len バ イ ト の デ ー タ を 複 製 す る 。 こ の 操 作 で は 、 複 製 さ れ る デ ー タ は fd_in か ら は 消 費 さ れ な い 。 し た が っ て 、 こ れ ら の デ ー タ を こ の 後 の splice(2) で コ ピ ー す る こ と が で き る 。
flags は 一 連 の 修 飾 フ ラ グ で あ り 、 splice(2) や vmsplice(2) と 共 通 の 名 前 で あ る 。
SPLICE_F_MOVE 現 在 の と こ ろ |
tee() で は 何 の 効 果 も な い 。 splice(2) |
参 照 。
SPLICE_F_NONBLOCK 入 出 力 で 停 止 |
(block) し な い 。 詳 細 は splice(2) 参 |
照 。
SPLICE_F_MORE 現 在 の と こ ろ |
tee() で は 何 の 効 果 も な い が 、 将 来 的 に は |
実 装 さ れ る 可 能 性 が あ る 。 splice(2) 参 照 。
SPLICE_F_GIFT |
tee() で は 未 使 用 。 vmsplice(2) 参 照 。 |
返 り 値
成 功 し て 完 了 す る と 、 tee() は 入 出 力 間 で 複 製 さ れ た バ イ ト 数 を 返 す 。 返 り 値 0 は デ ー タ の 転 送 が 行 わ れ な か っ た こ と を 示 す 。 こ の 場 合 、 処 理 を 停 止 (block) し て も 無 意 味 で あ る 。 な ぜ な ら 、 fd_in が 参 照 す る パ イ プ の 書 き 込 み 側 に 接 続 さ れ て い る 者 が い な い か ら で あ る 。 エ ラ ー の 場 合 、 tee() は −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。
エ ラ ー
EAGAIN |
SPLICE_F_NONBLOCK が flags に 指 定 さ れ て い て 、 か つ 操 作 が 停 止 す る よ う な 状 態 で あ っ た 。 | ||
EINVAL |
fd_in と fd_out の ど ち ら か が パ イ プ を 参 照 し て い な い 。 も し く は fd_in と fd_out が 同 じ パ イ プ を 参 照 し て い る 。 | ||
ENOMEM |
メ モ リ ー 不 足 。
バ ー ジ ョ ンtee() シ ス テ ム コ ー ル は Linux 2.6.17 で 初 め て 登 場 し た 。 ラ イ ブ ラ リ に よ る サ ポ ー ト は glibc バ ー ジ ョ ン 2.5 で 追 加 さ れ た 。 準 拠こ の シ ス テ ム コ ー ル は Linux 固 有 で あ る 。 注 意概 念 と し て は 、 tee() は 二 つ の パ イ プ 間 で デ ー タ の コ ピ ー を 行 う 。 し か し 、 実 際 に は 実 デ ー タ の コ ピ ー は 行 わ れ な い 。 内 部 で は 、 tee() は 入 力 側 に 対 す る 参 照 だ け を 作 成 す る こ と で 出 力 側 に デ ー タ を 追 加 す る 。 例以 下 の 例 は 、 tee() シ ス テ ム コ ー ル を 使 っ て 、 基 本 的 な tee(1) プ ロ グ ラ ム を 実 装 し た も の で あ る 。 以 下 は 利 用 例 で あ る 。 $ date
|./a.out out.log | cat #define _GNU_SOURCE int if (argc != 2)
{ fd =
open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644); do { if (len < 0)
{ /* close(fd); 関 連 項 目こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |