FreeBSD/DragonFlyBSD sendfile() システムコールはどのように機能しますか?

FreeBSD/DragonFlyBSD sendfile() システムコールはどのように機能しますか?

ファイルの送信()

パラメータはoffsetoff_tnbytes型、size_t両方ともファイル長という同じ内容を記述します。私のファイルがより長いが短い場合はoff_tどうなりますかsize_t?非同期で送信すると、現在のファイルオフセットが大きくなる可能性がありますが、サイズが大きいoff_tため、より多くを送信したいと思います。size_t

off_t署名された場合とsize_t署名されていない場合は、常に下げます。

設定できることを知っていますが、nbytes = 0具体的には長さを使いたいです。

ベストアンサー1

offsetパラメータが説明するものとは異なりますnbytes。代わりに、ファイルからコピーされたバイトが開始および終了する場所をそれぞれ説明します。

ファイルサイズが131,072バイト(128KiB)でoffset16,384およびnbytes32,768を使用している場合は、sendfile()ファイルの場所16,384から場所49,152にコピーし、場所16,384から始まり、合計32KiB(で指定nbytes)をコピーしますoffset

offset114,688と32,768を使用している場合は、114,688の場所から131,072のファイルの終わりまで合計16KiBをコピーnbytesします。sendfile()ファイルが予想より短いため、nbytes要求されたsendfile()データより少ないデータが送信されます。

offset147,456とnbytes32,768を使用すると、sendfile()0バイトが送信されます。先頭がファイルの終わりを過ぎると、コピーするバイトがないため、何も送信しません。

最後に0に設定された特別なケースがあります。nbytesこれはファイルの内容全体をコピーするため、offset0とnbytes0を使用するとsendfile()ファイル全体に対して合計131,072バイト(128KiB)が送信されます。

おすすめ記事