C++ 写入多个文件描述符

C++ 写入多个文件描述符,c++,c,linux,gcc,C++,C,Linux,Gcc,在将一个固定字节缓冲区写入多个文件描述符时,是否有操作系统级(Linux)的加速?当向一个文件描述符写入多个缓冲区时,可以使用writev(2),因此我想知道是否有类似的方法,或者必须通过多个sys调用来完成。我知道Linux上没有这样的syscall。手册页中给出了它们的详细列表 我也不会那么麻烦了。对于文件访问,真正的瓶颈是磁盘…一个vmsplice和tee的组合应该执行请求的操作,虽然它有多个调用,但是用户空间/内核空间的障碍只跨越了一次。我没有使用它,但这可能会起作用:lio_listi

在将一个固定字节缓冲区写入多个文件描述符时,是否有操作系统级(Linux)的加速?当向一个文件描述符写入多个缓冲区时,可以使用
writev(2)
,因此我想知道是否有类似的方法,或者必须通过多个sys调用来完成。

我知道Linux上没有这样的syscall。手册页中给出了它们的详细列表


我也不会那么麻烦了。对于文件访问,真正的瓶颈是磁盘…

一个
vmsplice
tee
的组合应该执行请求的操作,虽然它有多个调用,但是用户空间/内核空间的障碍只跨越了一次。

我没有使用它,但这可能会起作用:lio_listio


除了写入不会进入磁盘之外;写入所做的一切就是将数据复制到内核中的缓冲区。(有一些选项可以改变这一点,但这是默认行为。)OP的问题是一个好问题,因为如果有这样的问题,它将意味着一个副本,内核中可能只有一个缓冲区(内核中使用的资源更少)。我同意,我知道,但当您有足够的RAM,以便所有热文件都可以放入其中时,你不应该那么担心。我不认为内核能够在不同的文件之间共享文件段。@JamesKanze:我不确定共享缓冲区是否有效。如果您有两个文件,一个在SSD上,另一个在远处的网络驱动器上,SSD是否应该等待网络驱动器?根据具体情况,您可能希望至少成功写入一个文件,而不是两次半写。谢谢,但这仅适用于管道。