%20%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%AB%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F.png)
パラメータはoffset
型off_t
、nbytes
型、size_t
両方ともファイル長という同じ内容を記述します。私のファイルがより長いが短い場合はoff_t
どうなりますかsize_t
?非同期で送信すると、現在のファイルオフセットが大きくなる可能性がありますが、サイズが大きいoff_t
ため、より多くを送信したいと思います。size_t
off_t
署名された場合とsize_t
署名されていない場合は、常に下げます。
設定できることを知っていますが、nbytes = 0
具体的には長さを使いたいです。
答え1
offset
パラメータが説明するものとは異なりますnbytes
。代わりに、ファイルからコピーされたバイトが開始および終了する場所をそれぞれ説明します。
ファイルサイズが131,072バイト(128KiB)でoffset
16,384およびnbytes
32,768を使用している場合は、sendfile()
ファイルの場所16,384から場所49,152にコピーし、場所16,384から始まり、合計32KiB(で指定nbytes
)をコピーしますoffset
。
offset
114,688と32,768を使用している場合は、114,688の場所から131,072のファイルの終わりまで合計16KiBをコピーnbytes
します。sendfile()
ファイルが予想より短いため、nbytes
要求されたsendfile()
データより少ないデータが送信されます。
offset
147,456とnbytes
32,768を使用すると、sendfile()
0バイトが送信されます。先頭がファイルの終わりを過ぎると、コピーするバイトがないため、何も送信しません。
最後に0に設定された特別なケースがあります。nbytes
これはファイルの内容全体をコピーするため、offset
0とnbytes
0を使用するとsendfile()
ファイル全体に対して合計131,072バイト(128KiB)が送信されます。