OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man2 / sendfile.2
1 .\" This man page is Copyright (C) 1998 Pawel Krawczyk.
2 .\" Permission is granted to distribute possibly modified copies
3 .\" of this page provided the header is included verbatim,
4 .\" and in case of nontrivial modification author and date
5 .\" of the modification is added to the header.
6 .\" $Id: sendfile.2,v 1.5 1999/05/18 11:54:11 freitag Exp $
7 .\" 2000-11-19 bert hubert <ahu@ds9a.nl>: in_fd cannot be socket
8 .\"
9 .\" 2004-12-17, mtk
10 .\"     updated description of in_fd and out_fd for 2.6
11 .\"     Various wording and formatting changes
12 .\"
13 .\" 2005-03-31 Martin Pool <mbp@sourcefrog.net> mmap() improvements
14 .\"
15 .\"*******************************************************************
16 .\"
17 .\" This file was generated with po4a. Translate the source file.
18 .\"
19 .\"*******************************************************************
20 .TH SENDFILE 2 2011\-09\-14 Linux "Linux Programmer's Manual"
21 .SH 名前
22 sendfile \- ファイル・ディスクリプタ間でデータを転送する
23 .SH 書式
24 \fB#include <sys/sendfile.h>\fP
25 .sp
26 .\" The below is too ugly. Comments about glibc versions belong
27 .\" in the notes, not in the header.
28 .\"
29 .\" .B #include <features.h>
30 .\" .br
31 .\" .B #if (__GLIBC__==2 && __GLIBC_MINOR__>=1) || __GLIBC__>2
32 .\" .br
33 .\" .B #include <sys/sendfile.h>
34 .\" .br
35 .\" #else
36 .\" .br
37 .\" .B #include <sys/types.h>
38 .\" .br
39 .\" .B /* No system prototype before glibc 2.1. */
40 .\" .br
41 .\" .BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", off_t *" \
42 .\"                       offset ", size_t" " count" )
43 .\" .br
44 .\" .B #endif
45 .\"
46 \fBssize_t sendfile(int\fP\fI out_fd\fP\fB, int\fP\fI in_fd\fP\fB, off_t *\fP\fIoffset\fP\fB,
47 size_t\fP\fI count\fP\fB);\fP
48 .SH 説明
49 \fBsendfile\fP()  は、あるファイル・ディスクリプタから別の ファイル・ディスクリプタへのデータのコピーを行う。
50 このコピーはカーネル内で行われるので、 \fBsendfile\fP()  は、 \fBread\fP(2)  と \fBwrite\fP(2)
51 を組み合わせるよりも効率がよい。 \fBread\fP(2)  や \fBwrite\fP(2)  ではユーザ空間との間でデータの転送が必要となるからである。
52
53 \fIin_fd\fP は読み込みのためにオープンされたファイル・ディスクリプタ、 \fIout_fd\fP
54 は書き込みのためにオープンされたディスクリプタでなければならない。
55
56 \fIoffset\fP が NULL でない場合、 \fIoffset\fP は \fBsendfile\fP()  が \fIin_fd\fP
57 のどこからデータを読み始めるかを示すファイル・オフセットを保持する変数への ポインタである。 \fBsendfile\fP()
58 は復帰する時、この変数に最後に読み込んだバイトの 次のバイトのオフセットを書き込む。 \fIoffset\fP が NULL でない場合、
59 \fBsendfile\fP()  は \fIin_fd\fP のファイル・オフセットの現在値を変更しない。 NULL の場合は、ファイル・オフセットの現在値を
60 \fIin_fd\fP から読み込んだバイト数を反映した位置に調整する。
61
62 \fIoffset\fP が NULL の場合、データは \fIin_fd\fP の現在のファイル・オフセットから読み出され、
63 ファイル・オフセットはこの呼び出しで更新される。
64
65 \fIcount\fP は、ファイル・ディスクリプタ間でコピーするバイト数である。
66
67 \fIin_fd\fP 引き数は \fBmmap\fP(2) 風の操作ができるファイルを指していなければならな
68 い (ソケットを指定することはできない)。
69
70 2.6.33 より前の Linux カーネルでは \fIout_fd\fP はソケットを参照していなければな
71 らない。Linux 2.6.33 以降では、任意のファイルを参照することができる。
72 通常のファイルの場合には \fBsendfile\fP() はファイルオフセットを適切に変更する。
73 .SH 返り値
74 転送に成功した場合、 \fIout_fd\fP に書き込まれたバイト数を返す。エラーの場合、\-1 を返し、 \fIerrno\fP に適切な値を設定する。
75 .SH エラー
76 .TP 
77 \fBEAGAIN\fP
78 \fBO_NONBLOCK\fP を用いて非ブロック I/O が選択されたが、書き込みがブロックされた。
79 .TP 
80 \fBEBADF\fP
81 入力ファイルが読み込みのためにオープンされていないか、 出力ファイルが書き込みのためにオープンされていない。
82 .TP 
83 \fBEFAULT\fP
84 アドレスがおかしい。
85 .TP 
86 \fBEINVAL\fP
87 ディスクリプタが有効でないか、ロックされている。もしくは \fBmmap\fP(2)  風の操作が \fIin_fd\fP では利用できない。
88 .TP 
89 \fBEIO\fP
90 \fIin_fd\fP から読み込んでいるうちに予期しないエラーが起こった。
91 .TP 
92 \fBENOMEM\fP
93 \fIin_fd\fP から読み込むための十分なメモリがない。
94 .SH バージョン
95 \fBsendfile\fP は Linux 2.2 の新しい機能である。 インクルードファイル \fI<sys/sendfile.h>\fP は
96 glibc 2.1 から存在している。
97 .SH 準拠
98 POSIX.1\-2001 や他の標準では規定されていない。
99
100 他の UNIX システムでは、異なった方式やプロトタイプで \fBsendfile\fP()
101 を実装している。移植性を考慮したプログラムでは使用すべきではない。
102 .SH 注意
103 \fBsendfile\fP()  を使って TCP ソケットにファイルを送ろうとしていて、 ファイルの内容の前にヘッダ・データを付け加える必要がある場合は、
104 パケット数を最小にして性能を上げるために \fBtcp\fP(7)  に記述されている \fBTCP_CORK\fP オプションを使うといいだろう。
105
106 Linux 2.4 とそれ以前のバージョンでも、 \fIout_fd\fP は通常のファイルを参照でき、
107 \fBsendfile\fP() はそのファイルのオフセットの現在値を変更していた。
108
109 元々の Linux \fBsendfile\fP() システムコールは大きなファイルオフセットを
110 扱えるように設計されていなかった。その結果、Linux 2.4 で、
111 ビット幅の大きな \fIoffset\fP 引き数を持った \fBsendfile64\fP() が追加された。
112 glibc の \fBsendfile\fP() のラッパー関数はカーネルによるこの違いを吸収している。
113
114 \fBsendfile\fP()  が \fBEINVAL\fP や \fBENOSYS\fP で失敗するような場合は、 アプリケーションは
115 \fBread\fP(2)/\fBwrite\fP(2)  に戻すことを考えてもよいかもしれない。
116
117 Linux 固有の \fBsplice\fP(2) システムコールは、任意のファイル間 (例えば、
118 ソケット同士) でのデータ転送をサポートしている。
119 .SH 関連項目
120 \fBmmap\fP(2), \fBopen\fP(2), \fBsocket\fP(2), \fBsplice\fP(2)
121