Linuxの備忘録とか・・・(目次へ)Linuxの備忘録とか・・・(目次へ)teespliceのpipe間のやり取りは、in_pipeからout_pipeへ転送されたin_pipeバッファのデータは削除されますが、teeはin_pipeからout_pipeへ転送したin_pipeのバッファのデータは削除されません。inodeの同じバッファー領域のシーケンシャルなデータと管理されるのでなく、送信毎のpipe_bufferデータブロック単位で管理されます。private;};spliceのpipe時にコールされ、ipipeに送信されているデータは送信毎に設定されたpipe_bufferをipipe.bufsにリスト(配列)されています。ipipe.nrbufsは書込位置となり、ipipe.nrbufs--とすると最後に送信された送信済みデータの1つを削除します。ipipe.curbuf++とすれば読み込み先頭データの削除となります。書込pipe_bufferipipe->nrbufs--/ipipe->curbuf++でipipe->curbufのpipe_bufferは削除されます。spliceのサイズがpipe_bufferサイズより小さい時は、ipipeに掛かる変更はなく、pipe_bufferのoffset/lenに掛かる実装となります。ret;}treeからコールされ、spliceと異なり、in/outともpipeでないとエラーです。opipe->nrbufs+でopipeに複写し、spliceと異なりipipe->nrbufがデクリメントされに故、ipipeのデータは削除されません。*pageを共有する事で実装します。ノースAdsense広告情報が設定されていません。