提到的手册0
可以在两个任意文件描述符之间传输数据,也可以传输到socketfd上。如果文件立即发送,则此方法有效。因此,文件大小必须低于PIPE_BUF_SZ(= 65536)。
但是,如何处理更大的文件?我想了解sendfile()系统调用的区别。你会如何重写splice()
系统调用?
第二个拼接以sendfile()
返回。我想这是因为socketfd不可寻找。
Invalid argument
答案 0 :(得分:0)
sendfile()
systemcall不检查filedescriptor是否可搜索。对fd的唯一检查是,如果你可以读到(FMODE_READ)到fd。
splice()
会进行更多检查。其中,如果fd是可寻址的(FMODE_ P READ)/(FMODE_ P WRITE)。
这就是sendfile有效的原因,但是拼接不会。