我知道拼接,我们都可以留在内核中。但我不确定是否将数据或行踪信息传递给管道。
编辑1: 谢谢@vinayak,现在我知道实际上有来自管道缓冲区的数据副本。但是,我只是想知道为什么我们不能将行踪和长度信息传递给管道?
答案 0 :(得分:3)
splice()是一个系统调用机制,用于从一个文件执行i / o 内核空间中的另一个文件,无需从/向用户复制 space.It是一种提高I / O性能的方法。接头系统调用 避免从用户空间到内核空间的所有数据复制&反之亦然。它 从输入文件中读取指定的偏移量&写入管道 在内核空间。没有数据复制到用户空间。然后它 可以调用将数据从管道写入输出文件 指定的/当前的偏移量。
splice()通过使用管道缓冲机制来打开文件 数据源的描述符,然后是数据接收器的描述符 splice()它可以将两者连接在一起。换句话说,splice()工作 在用户可以控制并移动数据的内核缓冲区上 从/到任意文件描述符的缓冲区。指定 管道偏移是一个错误。如果没有指定偏移量 输入/输出文件描述符然后是当前偏移量 假设是指定的偏移量。目前其中一个文件 描述符必须是管道否则是错误。