接头系统调用,什么传递给管道?数据或行踪信息?

时间:2013-06-24 05:57:14

标签: linux linux-kernel system-calls splice

我知道拼接,我们都可以留在内核中。但我不确定是否将数据或行踪信息传递给管道。

编辑1: 谢谢@vinayak,现在我知道实际上有来自管道缓冲区的数据副本。但是,我只是想知道为什么我们不能将行踪和长度信息传递给管道?

  • 在单个进程中,地址空间相同
  • 在差异进程之间,如果管道缓冲区是线性映射的,它也可以工作。如果没有,我们可以使用DMA地址。

1 个答案:

答案 0 :(得分:3)

refer here

  

splice()是一个系统调用机制,用于从一个文件执行i / o   内核空间中的另一个文件,无需从/向用户复制   space.It是一种提高I / O性能的方法。接头系统调用   避免从用户空间到内核空间的所有数据复制&反之亦然。它   从输入文件中读取指定的偏移量&写入管道   在内核空间。没有数据复制到用户空间。然后它   可以调用将数据从管道写入输出文件   指定的/当前的偏移量。

     

splice()通过使用管道缓冲机制来打开文件   数据源的描述符,然后是数据接收器的描述符   splice()它可以将两者连接在一起。换句话说,splice()工作   在用户可以控制并移动数据的内核缓冲区上   从/到任意文件描述符的缓冲区。指定   管道偏移是一个错误。如果没有指定偏移量   输入/输出文件描述符然后是当前偏移量   假设是指定的偏移量。目前其中一个文件   描述符必须是管道否则是错误。