序幕
sendfile()
是一个非常有用的系统调用,原因有两个:
首先,它比/ (或者/如果你更喜欢那个 jive)循环的代码更少。
其次,它比上述方法更快(更少的系统调用,实现可以在没有缓冲区的设备之间复制等......)。read()
write()
recv()
send()
更少的代码。更高效。惊人的。
在 UNIX 中,一切(大部分)都是一个文件。这是柏拉图理论与现实世界实践碰撞的丑陋领域。我知道套接字与驻留在某些设备上的文件根本不同。我还没有深入研究 Linux/*BSD/Darwin/任何操作系统实现的源代码,sendfile()
以了解为什么这个特定的系统调用仅限于写入套接字(特别是流式套接字)。
我只是想知道...
问题
sendfile()
允许目标文件描述符成为套接字以外的东西(如磁盘文件或管道)有什么限制?