OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man2 / sendfile.2
index 07671d9..53ea47a 100644 (file)
 .\"
 .\" 2005-03-31 Martin Pool <mbp@sourcefrog.net> mmap() improvements
 .\"
-.\" Japanese Version Copyright (c) 1999 HANATAKA Shinya
-.\"         all rights reserved.
-.\" Translated 1999-06-26, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
-.\" Updated 2001-02-16, Kentaro Shirakata <argrath@ub32.org>
-.\" Updated 2003-09-08, Kentaro Shirakata <argrath@ub32.org>
-.\" Updated 2005-03-14, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
-.\" Updated 2005-04-17, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
-.\" Updated 2010-04-18, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.24
+.\"*******************************************************************
 .\"
-.\"WORD:       descriptor              ¥Ç¥£¥¹¥¯¥ê¥×¥¿
-.\"WORD:       socket                  ¥½¥±¥Ã¥È
-.\"WORD:       lock                    ¥í¥Ã¥¯
+.\" This file was generated with po4a. Translate the source file.
 .\"
-.TH SENDFILE 2 2010-02-15 "Linux" "Linux Programmer's Manual"
-.SH Ì¾Á°
-sendfile \- ¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿´Ö¤Ç¥Ç¡¼¥¿¤òžÁ÷¤¹¤ë
-.SH ½ñ¼°
-.B #include <sys/sendfile.h>
+.\"*******************************************************************
+.TH SENDFILE 2 2011\-09\-14 Linux "Linux Programmer's Manual"
+.SH 名前
+sendfile \- ファイル・ディスクリプタ間でデータを転送する
+.SH 書式
+\fB#include <sys/sendfile.h>\fP
 .sp
-.BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", off_t *" \
-                      offset ", size_t" " count" );
-.\" °Ê²¼¤Ï¡¢¤¢¤Þ¤ê¤Ë¤â±ø¤¤¡£ glibc ¥Ð¡¼¥¸¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Î¥³¥á¥ó¥È¤Ï
-.\" ¡Ö¥Ø¥Ã¥À¡×¤Ç¤Ï¤Ê¤¯¡¢¡ÖÃí°Õ¡×¤Ë½ñ¤¤¤Æ¤ª¤¯¡£
+.\" The below is too ugly. Comments about glibc versions belong
+.\" in the notes, not in the header.
 .\"
 .\" .B #include <features.h>
 .\" .br
@@ -53,138 +43,79 @@ sendfile \- 
 .\" .br
 .\" .B #endif
 .\"
-.SH ÀâÌÀ
-.BR sendfile ()
-¤Ï¡¢¤¢¤ë¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤éÊ̤Î
-¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ø¤Î¥Ç¡¼¥¿¤Î¥³¥Ô¡¼¤ò¹Ô¤¦¡£
-¤³¤Î¥³¥Ô¡¼¤Ï¥«¡¼¥Í¥ëÆâ¤Ç¹Ô¤ï¤ì¤ë¤Î¤Ç¡¢
-.BR sendfile ()
-¤Ï¡¢
-.BR read (2)
-¤È
-.BR write (2)
-¤òÁȤ߹ç¤ï¤»¤ë¤è¤ê¤â¸úΨ¤¬¤è¤¤¡£
-.BR read (2)
-¤ä
-.BR write (2)
-¤Ç¤Ï¥æ¡¼¥¶¶õ´Ö¤È¤Î´Ö¤Ç¥Ç¡¼¥¿¤ÎžÁ÷¤¬É¬ÍפȤʤ뤫¤é¤Ç¤¢¤ë¡£
+\fBssize_t sendfile(int\fP\fI out_fd\fP\fB, int\fP\fI in_fd\fP\fB, off_t *\fP\fIoffset\fP\fB,
+size_t\fP\fI count\fP\fB);\fP
+.SH 説明
+\fBsendfile\fP()  は、あるファイル・ディスクリプタから別の ファイル・ディスクリプタへのデータのコピーを行う。
+このコピーはカーネル内で行われるので、 \fBsendfile\fP()  は、 \fBread\fP(2)  と \fBwrite\fP(2)
+を組み合わせるよりも効率がよい。 \fBread\fP(2)  や \fBwrite\fP(2)  ではユーザ空間との間でデータの転送が必要となるからである。
 
-.I in_fd
-¤ÏÆɤ߹þ¤ß¤Î¤¿¤á¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¢
-.I out_fd
-¤Ï½ñ¤­¹þ¤ß¤Î¤¿¤á¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+\fIin_fd\fP は読み込みのためにオープンされたファイル・ディスクリプタ、 \fIout_fd\fP
+は書き込みのためにオープンされたディスクリプタでなければならない。
 
-.I offset
-¤¬ NULL ¤Ç¤Ê¤¤¾ì¹ç¡¢
-.I offset
-¤Ï
-.BR sendfile ()
-¤¬
-.I in_fd
-¤Î¤É¤³¤«¤é¥Ç¡¼¥¿¤òÆɤ߻Ϥá¤ë¤«¤ò¼¨¤¹¥Õ¥¡¥¤¥ë¡¦¥ª¥Õ¥»¥Ã¥È¤òÊÝ»ý¤¹¤ëÊÑ¿ô¤Ø¤Î
-¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
-.BR sendfile ()
-¤ÏÉüµ¢¤¹¤ë»þ¡¢¤³¤ÎÊÑ¿ô¤ËºÇ¸å¤ËÆɤ߹þ¤ó¤À¥Ð¥¤¥È¤Î
-¼¡¤Î¥Ð¥¤¥È¤Î¥ª¥Õ¥»¥Ã¥È¤ò½ñ¤­¹þ¤à¡£
-.I offset
-¤¬ NULL ¤Ç¤Ê¤¤¾ì¹ç¡¢
-.BR sendfile ()
-¤Ï
-.I in_fd
-¤Î¥Õ¥¡¥¤¥ë¡¦¥ª¥Õ¥»¥Ã¥È¤Î¸½ºßÃͤòÊѹ¹¤·¤Ê¤¤¡£
-NULL ¤Î¾ì¹ç¤Ï¡¢¥Õ¥¡¥¤¥ë¡¦¥ª¥Õ¥»¥Ã¥È¤Î¸½ºßÃͤò
-.I in_fd
-¤«¤éÆɤ߹þ¤ó¤À¥Ð¥¤¥È¿ô¤òÈ¿±Ç¤·¤¿°ÌÃÖ¤ËÄ´À°¤¹¤ë¡£
+\fIoffset\fP が NULL でない場合、 \fIoffset\fP は \fBsendfile\fP()  が \fIin_fd\fP
+のどこからデータを読み始めるかを示すファイル・オフセットを保持する変数への ポインタである。 \fBsendfile\fP()
+は復帰する時、この変数に最後に読み込んだバイトの 次のバイトのオフセットを書き込む。 \fIoffset\fP が NULL でない場合、
+\fBsendfile\fP()  は \fIin_fd\fP のファイル・オフセットの現在値を変更しない。 NULL の場合は、ファイル・オフセットの現在値を
+\fIin_fd\fP から読み込んだバイト数を反映した位置に調整する。
 
-.I offset
-¤¬ NULL ¤Î¾ì¹ç¡¢¥Ç¡¼¥¿¤Ï
-.I in_fd
-¤Î¸½ºß¤Î¥Õ¥¡¥¤¥ë¡¦¥ª¥Õ¥»¥Ã¥È¤«¤éÆɤ߽Фµ¤ì¡¢
-¥Õ¥¡¥¤¥ë¡¦¥ª¥Õ¥»¥Ã¥È¤Ï¤³¤Î¸Æ¤Ó½Ð¤·¤Ç¹¹¿·¤µ¤ì¤ë¡£
+\fIoffset\fP が NULL の場合、データは \fIin_fd\fP の現在のファイル・オフセットから読み出され、
+ファイル・オフセットはこの呼び出しで更新される。
 
-.I count
-¤Ï¡¢¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿´Ö¤Ç¥³¥Ô¡¼¤¹¤ë¥Ð¥¤¥È¿ô¤Ç¤¢¤ë¡£
+\fIcount\fP は、ファイル・ディスクリプタ間でコピーするバイト数である。
 
-º£¤Î¤È¤³¤í (Linux 2.6.9 ¤Ç¤Ï)¡¢
-.I in_fd
-¤Ï
-.BR mmap (2)
-É÷¤ÎÁàºî¤¬¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¤ò»Ø¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤
-(¥½¥±¥Ã¥È¤ò»Ø¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤)¡£¤Þ¤¿¡¢
-.I out_fd
-¤Ï¥½¥±¥Ã¥È¤ò»Ø¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+\fIin_fd\fP 引き数は \fBmmap\fP(2) 風の操作ができるファイルを指していなければならな
+い (ソケットを指定することはできない)。
 
-.BR sendfile ()
-¤¬
-.B EINVAL
-¤ä
-.B ENOSYS
-¤Ç¼ºÇÔ¤¹¤ë¤è¤¦¤Ê¾ì¹ç¤Ï¡¢
-¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï
-.BR read (2)/ write (2)
-¤ËÌ᤹¤³¤È¤ò¹Í¤¨¤Æ¤â¤è¤¤¤«¤â¤·¤ì¤Ê¤¤¡£
-.SH ÊÖ¤êÃÍ
-žÁ÷¤ËÀ®¸ù¤·¤¿¾ì¹ç¡¢
-.I out_fd
-¤Ë½ñ¤­¹þ¤Þ¤ì¤¿¥Ð¥¤¥È¿ô¤òÊÖ¤¹¡£¥¨¥é¡¼¤Î¾ì¹ç¡¢\-1 ¤òÊÖ¤·¡¢
-.I errno
-¤ËŬÀÚ¤ÊÃͤòÀßÄꤹ¤ë¡£
-.SH ¥¨¥é¡¼
-.TP
-.B EAGAIN
-.B O_NONBLOCK
-¤òÍѤ¤¤ÆÈó¥Ö¥í¥Ã¥¯ I/O ¤¬ÁªÂò¤µ¤ì¤¿¤¬¡¢½ñ¤­¹þ¤ß¤¬¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¡£
-.TP
-.B EBADF
-ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬Æɤ߹þ¤ß¤Î¤¿¤á¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¡¢
-½ÐÎÏ¥Õ¥¡¥¤¥ë¤¬½ñ¤­¹þ¤ß¤Î¤¿¤á¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Ê¤¤¡£
-.TP
-.B EFAULT
-¥¢¥É¥ì¥¹¤¬¤ª¤«¤·¤¤¡£
-.TP
-.B EINVAL
-¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Í­¸ú¤Ç¤Ê¤¤¤«¡¢¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë¡£¤â¤·¤¯¤Ï
-.BR mmap (2)
-É÷¤ÎÁàºî¤¬
-.I in_fd
-¤Ç¤ÏÍøÍѤǤ­¤Ê¤¤¡£
-.TP
-.B EIO
-.I in_fd
-¤«¤éÆɤ߹þ¤ó¤Ç¤¤¤ë¤¦¤Á¤Ëͽ´ü¤·¤Ê¤¤¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¡£
-.TP
-.B ENOMEM
-.I in_fd
-¤«¤éÆɤ߹þ¤à¤¿¤á¤Î½½Ê¬¤Ê¥á¥â¥ê¤¬¤Ê¤¤¡£
-.SH ¥Ð¡¼¥¸¥ç¥ó
-.B sendfile
-¤Ï Linux 2.2 ¤Î¿·¤·¤¤µ¡Ç½¤Ç¤¢¤ë¡£
-¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë
-.I <sys/sendfile.h>
-¤Ï glibc 2.1 ¤«¤é¸ºß¤·¤Æ¤¤¤ë¡£
-.SH ½àµò
-POSIX.1-2001 ¤ä¾¤Îɸ½à¤Ç¤Ïµ¬Äꤵ¤ì¤Æ¤¤¤Ê¤¤¡£
+2.6.33 より前の Linux カーネルでは \fIout_fd\fP はソケットを参照していなければな
+らない。Linux 2.6.33 以降では、任意のファイルを参照することができる。
+通常のファイルの場合には \fBsendfile\fP() はファイルオフセットを適切に変更する。
+.SH 返り値
+転送に成功した場合、 \fIout_fd\fP に書き込まれたバイト数を返す。エラーの場合、\-1 を返し、 \fIerrno\fP に適切な値を設定する。
+.SH エラー
+.TP 
+\fBEAGAIN\fP
+\fBO_NONBLOCK\fP を用いて非ブロック I/O が選択されたが、書き込みがブロックされた。
+.TP 
+\fBEBADF\fP
+入力ファイルが読み込みのためにオープンされていないか、 出力ファイルが書き込みのためにオープンされていない。
+.TP 
+\fBEFAULT\fP
+アドレスがおかしい。
+.TP 
+\fBEINVAL\fP
+ディスクリプタが有効でないか、ロックされている。もしくは \fBmmap\fP(2)  風の操作が \fIin_fd\fP では利用できない。
+.TP 
+\fBEIO\fP
+\fIin_fd\fP から読み込んでいるうちに予期しないエラーが起こった。
+.TP 
+\fBENOMEM\fP
+\fIin_fd\fP から読み込むための十分なメモリがない。
+.SH バージョン
+\fBsendfile\fP は Linux 2.2 の新しい機能である。 インクルードファイル \fI<sys/sendfile.h>\fP は
+glibc 2.1 から存在している。
+.SH 準拠
+POSIX.1\-2001 や他の標準では規定されていない。
 
-¾¤Î UNIX ¥·¥¹¥Æ¥à¤Ç¤Ï¡¢°Û¤Ê¤Ã¤¿Êý¼°¤ä¥×¥í¥È¥¿¥¤¥×¤Ç
-.BR sendfile ()
-¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¡£°Ü¿¢À­¤ò¹Íθ¤·¤¿¥×¥í¥°¥é¥à¤Ç¤Ï»ÈÍѤ¹¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£
-.SH Ãí°Õ
-.BR sendfile ()
-¤ò»È¤Ã¤Æ TCP ¥½¥±¥Ã¥È¤Ë¥Õ¥¡¥¤¥ë¤òÁ÷¤í¤¦¤È¤·¤Æ¤¤¤Æ¡¢
-¥Õ¥¡¥¤¥ë¤ÎÆâÍƤÎÁ°¤Ë¥Ø¥Ã¥À¡¦¥Ç¡¼¥¿¤òÉÕ¤±²Ã¤¨¤ëɬÍפ¬¤¢¤ë¾ì¹ç¤Ï¡¢
-¥Ñ¥±¥Ã¥È¿ô¤òºÇ¾®¤Ë¤·¤ÆÀ­Ç½¤ò¾å¤²¤ë¤¿¤á¤Ë
-.BR tcp (7)
-¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë
-.B TCP_CORK
-¥ª¥×¥·¥ç¥ó¤ò»È¤¦¤È¤¤¤¤¤À¤í¤¦¡£
+他の UNIX システムでは、異なった方式やプロトタイプで \fBsendfile\fP()
+を実装している。移植性を考慮したプログラムでは使用すべきではない。
+.SH 注意
+\fBsendfile\fP()  を使って TCP ソケットにファイルを送ろうとしていて、 ファイルの内容の前にヘッダ・データを付け加える必要がある場合は、
+パケット数を最小にして性能を上げるために \fBtcp\fP(7)  に記述されている \fBTCP_CORK\fP オプションを使うといいだろう。
+
+Linux 2.4 とそれ以前のバージョンでも、 \fIout_fd\fP は通常のファイルを参照でき、
+\fBsendfile\fP() はそのファイルのオフセットの現在値を変更していた。
+
+元々の Linux \fBsendfile\fP() システムコールは大きなファイルオフセットを
+扱えるように設計されていなかった。その結果、Linux 2.4 で、
+ビット幅の大きな \fIoffset\fP 引き数を持った \fBsendfile64\fP() が追加された。
+glibc の \fBsendfile\fP() のラッパー関数はカーネルによるこの違いを吸収している。
+
+\fBsendfile\fP()  が \fBEINVAL\fP や \fBENOSYS\fP で失敗するような場合は、 アプリケーションは
+\fBread\fP(2)/\fBwrite\fP(2)  に戻すことを考えてもよいかもしれない。
+
+Linux 固有の \fBsplice\fP(2) システムコールは、任意のファイル間 (例えば、
+ソケット同士) でのデータ転送をサポートしている。
+.SH 関連項目
+\fBmmap\fP(2), \fBopen\fP(2), \fBsocket\fP(2), \fBsplice\fP(2)
 
-Linux 2.4 ¤È¤½¤ì°ÊÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢
-.I out_fd
-¤ÏÄ̾ï¤Î¥Õ¥¡¥¤¥ë¤ò»²¾È¤Ç¤­¡¢
-.BR sendfile ()
-¤Ï¤½¤Î¥Õ¥¡¥¤¥ë¤Î¥ª¥Õ¥»¥Ã¥È¤Î¸½ºßÃͤòÊѹ¹¤·¤Æ¤¤¤¿¡£
-.SH ´ØÏ¢¹àÌÜ
-.BR mmap (2),
-.BR open (2),
-.BR socket (2),
-.BR splice (2)