前奏曲
sendfile()
次の 2 つの理由から、非常に便利な syscall です。
まず、/ (ジャイブを好む場合は/ ) ループよりもコードが少なくて済みます。
第二に、前述の方法よりも高速です(システムコールが少ない、実装がバッファなしでデバイス間でコピーされるなど)。read()
write()
recv()
send()
コードが少ない。もっと効率的。素晴らしい。
UNIX では、すべてが (ほとんどの場合) ファイルです。これは、プラトニックな理論と現実世界の実践が衝突した醜い領域です。ソケットは、一部のデバイスに存在するファイルとは根本的に異なることを理解しています。Linux/*BSD/Darwin/OS が実装sendfile()
するものは何でも、この特定のシステムコールがソケット (具体的にはストリーミング ソケット) への書き込みに制限されている理由を知るために、ソースを掘り下げていません。
ただ知りたいだけです...
質問
sendfile()
宛先ファイル記述子をソケット以外のもの (ディスク ファイルやパイプなど) にすることを制限しているのは何ですか?