OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man2 / splice.2
index 3822de8..e18fd29 100644 (file)
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
 .\"
-.\" Japanese Version Copyright (c) 2007  Akihiro MOTOKI
-.\"         all rights reserved.
-.\" Translated 2007-02-04, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
-.\" Updated 2008-11-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.13
-.\" 
-.TH SPLICE 2 2009-09-15 "Linux" "Linux Programmer's Manual"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH SPLICE 2 2009\-09\-15 Linux "Linux Programmer's Manual"
 .SH 名前
 splice \- パイプとの間でデータを継ぎ合わせる
 .SH 書式
 .nf
-.BR "#define _GNU_SOURCE" "         /* feature_test_macros(7) 参照 */"
-.B #include <fcntl.h>
+\fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
+\fB#include <fcntl.h>\fP
 
-.BI "ssize_t splice(int " fd_in ", loff_t *" off_in ", int " fd_out ,
-.BI "               loff_t *" off_out ", size_t " len \
-", unsigned int " flags );
-.fi
 .\" Return type was long before glibc 2.7
+\fBssize_t splice(int \fP\fIfd_in\fP\fB, loff_t *\fP\fIoff_in\fP\fB, int \fP\fIfd_out\fP\fB,\fP
+\fB               loff_t *\fP\fIoff_out\fP\fB, size_t \fP\fIlen\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP
+.fi
 .SH 説明
-.BR splice ()
-は、カーネルアドレス空間とユーザアドレス空間との間のコピーを伴わずに、
-2 つのファイルディスクリプタ間でデータの移動を行う。
-ファイルディスクリプタ
-.I fd_in
-からファイルディスクリプタ
-.I fd_out
-へ最大
-.I len
-バイトを転送する。
-2 つのファイルディスクリプタのうち一つは
-パイプを参照していなければならない。
-.PP
-.I fd_in
-がパイプを参照している場合、
-.I off_in
-は NULL でなければならない。
-.I fd_in
-がパイプを参照しておらず、
-.I off_in
-が NULL の場合、
-.I fd_in
-の現在のファイルオフセットから始まるバイトを読み出す。
-現在のファイルオフセットは適切に調整される。
-.I fd_in
-がパイプを参照しておらず、
-.I off_in
-が NULL でない場合、
-.I off_in
-は
-.I fd_in
-からのデータ読み出しを開始する先頭オフセットを格納したバッファ
-へのポインタでなければならない。この場合、
-.I fd_in
-の現在のファイルオフセットは変更されない。
-.I fd_out
-と
-.I off_out
-に関しても同様である。
-.PP
-.I flags
-引き数には、以下の値の 0 個以上のビット単位の論理和を
-とったものを指定する:
-.TP 1.9i
-.B SPLICE_F_MOVE
-ページのコピーでなく移動を試みる。
-これはカーネルに対するヒントでしかない。
-つまり、カーネルがパイプからページを移動できない場合や、
-パイプバッファがページ全部を参照していない場合は、
-ページのコピーが行われることもある。
-このフラグの最初の実装にはバグがあった。そのため、
-Linux 2.6.21 以降ではこのフラグの操作はできないようになっている
-(ただし、
-.BR splice ()
-コールでこのフラグを指定することは今も認められている)。
-将来、正しい実装が行われることだろう。
-.TP
-.B SPLICE_F_NONBLOCK
-入出力時に停止 (block) しない。
-このフラグを指定すると、
-splice によるパイプ操作を非停止モード (nonblocking) で
-行おうとするが、その場合でも
-.BR splice ()
-は停止することもある。なぜなら、データのやり取りを行う
-ファイルディスクリプタは
-.RB ( O_NONBLOCK
-フラグをセットされていない場合) 停止する可能性があるからである。
-.TP
-.B SPLICE_F_MORE
-この後の splice でさらに転送されるデータがあることを示す。
-このフラグは
-.I fd_out
-がソケットを参照している場合に有用なヒントとなる
-.RB ( send (2)
-の
-.B MSG_MORE
-や
-.BR tcp (7)
-の
-.B TCP_CORK
-の説明も参照)。
-.TP
-.B SPLICE_F_GIFT
-.BR splice ()
-では使用しない。
-.BR vmsplice (2)
-参照。
+\fBsplice\fP()  は、カーネルアドレス空間とユーザアドレス空間との間のコピーを伴わずに、 2 つのファイルディスクリプタ間でデータの移動を行う。
+ファイルディスクリプタ \fIfd_in\fP からファイルディスクリプタ \fIfd_out\fP へ最大 \fIlen\fP バイトを転送する。 2
+つのファイルディスクリプタのうち一つは パイプを参照していなければならない。
+
+\fIfd_in\fP がパイプを参照している場合、 \fIoff_in\fP は NULL でなければならない。 \fIfd_in\fP がパイプを参照しておらず、
+\fIoff_in\fP が NULL の場合、 \fIfd_in\fP の現在のファイルオフセットから始まるバイトを読み出す。
+現在のファイルオフセットは適切に調整される。 \fIfd_in\fP がパイプを参照しておらず、 \fIoff_in\fP が NULL でない場合、
+\fIoff_in\fP は \fIfd_in\fP からのデータ読み出しを開始する先頭オフセットを格納したバッファ へのポインタでなければならない。この場合、
+\fIfd_in\fP の現在のファイルオフセットは変更されない。 \fIfd_out\fP と \fIoff_out\fP に関しても同様である。
+
+\fIflags\fP 引き数には、以下の値の 0 個以上をビット毎の論理和の形で指定する。
+.TP  1.9i
+\fBSPLICE_F_MOVE\fP
+ページのコピーでなく移動を試みる。 これはカーネルに対するヒントでしかない。 つまり、カーネルがパイプからページを移動できない場合や、
+パイプバッファがページ全部を参照していない場合は、 ページのコピーが行われることもある。 このフラグの最初の実装にはバグがあった。そのため、 Linux
+2.6.21 以降ではこのフラグの操作はできないようになっている (ただし、 \fBsplice\fP()
+コールでこのフラグを指定することは今も認められている)。 将来、正しい実装が行われることだろう。
+.TP 
+\fBSPLICE_F_NONBLOCK\fP
+入出力時に停止 (block) しない。 このフラグを指定すると、 splice によるパイプ操作を非停止モード (nonblocking) で
+行おうとするが、その場合でも \fBsplice\fP()  は停止することもある。なぜなら、データのやり取りを行う ファイルディスクリプタは
+(\fBO_NONBLOCK\fP フラグをセットされていない場合) 停止する可能性があるからである。
+.TP 
+\fBSPLICE_F_MORE\fP
+この後の splice でさらに転送されるデータがあることを示す。 このフラグは \fIfd_out\fP がソケットを参照している場合に有用なヒントとなる
+(\fBsend\fP(2)  の \fBMSG_MORE\fP や \fBtcp\fP(7)  の \fBTCP_CORK\fP の説明も参照)。
+.TP 
+\fBSPLICE_F_GIFT\fP
+\fBsplice\fP()  では使用しない。 \fBvmsplice\fP(2)  参照。
 .SH 返り値
-成功して完了すると、
-.BR splice ()
-はパイプから出し入れしたバイト数を返す。
-返り値 0 はデータの転送が行わなかったことを示す。
-この場合、処理を停止 (block) しても無意味である。
-なぜなら、
-.I fd_in
+成功して完了すると、 \fBsplice\fP()  はパイプから出し入れしたバイト数を返す。 返り値 0 はデータの転送が行わなかったことを示す。
+この場合、処理を停止 (block) しても無意味である。 なぜなら、 \fIfd_in\fP
 が参照するパイプの書き込み側に接続されている者がいないからである。
-.PP
-エラーの場合、
-.BR splice ()
-は \-1 を返し、
-.I errno
-にエラーを示す値を設定する。
+
+エラーの場合、 \fBsplice\fP()  は \-1 を返し、 \fIerrno\fP にエラーを示す値を設定する。
 .SH エラー
-.TP
-.B EBADF
-ファイルディスクリプタの一方または両方が有効ではない、
-もしくは適切な read-write モードではない。
-.TP
-.B EINVAL
-対象のファイルシステムが splice に対応していない、
-または対象のファイルが追記モードでオープンされている、
-.\" 追記モードでのエラーは 2.6.27 以降で発生する。
-.\" それより前のカーネルでは追記モードでの splice() は正しく動作しない。
-またはディスクリプタのどちらもパイプを参照していない、
-または seek できないデバイスに対してオフセットが指定された。
-.TP
-.B ENOMEM
+.TP 
+\fBEBADF\fP
+ファイルディスクリプタの一方または両方が有効ではない、 もしくは適切な read\-write モードではない。
+.TP 
+\fBEINVAL\fP
+.\" The append-mode error is given since 2.6.27; in earlier kernels,
+.\" splice() in append mode was broken
+対象のファイルシステムが splice に対応していない、 または対象のファイルが追記モードでオープンされている、
+またはディスクリプタのどちらもパイプを参照していない、 または seek できないデバイスに対してオフセットが指定された。
+.TP 
+\fBENOMEM\fP
 メモリ不足。
-.TP
-.B ESPIPE
-.I off_in
-か
-.I off_out
-のいずれかが NULL ではないが、対応するファイルディスクリプタが
-パイプを参照している。
+.TP 
+\fBESPIPE\fP
+\fIoff_in\fP か \fIoff_out\fP のいずれかが NULL ではないが、対応するファイルディスクリプタが パイプを参照している。
 .SH バージョン
-.BR splice ()
-システムコールは Linux 2.6.17 で初めて登場した。
+\fBsplice\fP()  システムコールは Linux 2.6.17 で初めて登場した。
 .SH 準拠
 このシステムコールは Linux 固有である。
 .SH 注意
-3 つのシステムコール
-.RB ( splice (),
-.BR vmsplice (2),
-.BR tee (2))
-を使うと、ユーザ空間プログラムは任意のカーネルバッファに対する
-完全な制御ができる。カーネルバッファは、パイプに使用されているのと
-同種のバッファを使ってカーネル内に実装されている。
-大まかにいうと、これらのシステムコールは以下の仕事を行う:
-.TP 1.2i
-.BR splice ()
-バッファから任意のファイルディスクリプタや、その逆方向、
-もしくはあるバッファから別のバッファへの、データ移動を行う。
-.TP
-.BR tee (2)
+3 つのシステムコール (\fBsplice\fP(), \fBvmsplice\fP(2), \fBtee\fP(2))
+を使うと、ユーザ空間プログラムは任意のカーネルバッファに対する 完全な制御ができる。カーネルバッファは、パイプに使用されているのと
+同種のバッファを使ってカーネル内に実装されている。 大まかにいうと、これらのシステムコールは以下の仕事を行う:
+.TP  1.2i
+\fBsplice\fP()
+バッファから任意のファイルディスクリプタや、その逆方向、 もしくはあるバッファから別のバッファへの、データ移動を行う。
+.TP 
+\fBtee\fP(2)
 あるバッファから別のバッファへのデータ「コピー」を行う。
-.TP
-.BR vmsplice (2)
+.TP 
+\fBvmsplice\fP(2)
 ユーザ空間からバッファへのデータ「コピー」を行う。
 .PP
-ここではコピーの話をしているが、実際のコピーは一般的に回避される。
-カーネルは、パイプ・バッファをカーネルメモリのページへのポインタ集合として
-実装し、ページへの参照回数を管理することで、これを実現している。
-カーネルは、対象となるページを参照する (出力バッファ用の) ポインタを
-新規に作成することでバッファ内のページの「コピー」を作成し、
-そのページの参照回数を増やす。つまり、ポインタだけがコピーされ、
-バッファのページはコピーされない。
 .\"
 .\" Linus: Now, imagine using the above in a media server, for example.
 .\" Let's say that a year or two has passed, so that the video drivers
@@ -222,10 +133,11 @@ splice によるパイプ操作を非停止モード (nonblocking) で
 .\" the data and choose to forward it to two or more different
 .\" users - for things like logging etc.).
 .\"
+ここではコピーの話をしているが、実際のコピーは一般的に回避される。 カーネルは、パイプ・バッファをカーネルメモリのページへのポインタ集合として
+実装し、ページへの参照回数を管理することで、これを実現している。 カーネルは、対象となるページを参照する (出力バッファ用の) ポインタを
+新規に作成することでバッファ内のページの「コピー」を作成し、 そのページの参照回数を増やす。つまり、ポインタだけがコピーされ、
+バッファのページはコピーされない。
 .SH 例
-.BR tee (2)
-参照。
+\fBtee\fP(2)  参照。
 .SH 関連項目
-.BR sendfile (2),
-.BR tee (2),
-.BR vmsplice (2)
+\fBsendfile\fP(2), \fBtee\fP(2), \fBvmsplice\fP(2)