Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all bug

名前

       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 はパイプを参照していなければならない。

       ポインター ioviovec 構造体の配列を指す。 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_NONBLOCKflags に指定されていて、かつ操作が停止するような状態であった。

       EBADF  fd が有効でない、もしくはパイプを参照していない。

       EINVAL nr_segsIOV_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/ に書かれている。