![](/img/trans.png)
[英]LINUX FIFO named pipe (IPC) stops writing/reading message at specific file descriptor
[英]linux pipe data from file descriptor into a fifo
可以说我知道文件描述符fd
在我的进程中已打开供读取。 我想将来fd
数据传递到可在进程外读取的fifo
,从而避免在fd
上调用poll
或select
并手动读取/转发数据。 能做到吗?
您是说要求操作系统从现在开始一直在幕后进行此操作? 像I / O重定向一样?
不,你不能那样做。
您可以生成一个除了读取文件fd和写入管道fd之外什么都不做的线程。 为了避免在read(2)
和write(2)
系统调用中复制内存的开销,可以使用sendfile(out_fd, in_fd, NULL, 4096)
告诉内核将页面从in_fd
复制到out_fd
。 请参见手册页 。
使用splice(2)
可能会获得更好的结果,因为它设计用于文件和管道。 sendfile(2)
曾经要求out_fd
是一个套接字。 (设计用于零复制,例如从Web服务器在TCP套接字上发送静态数据。)
Linux确实具有异步I / O ,因此您可以将读取或写入排队在后台进行。 这不是一个好选择,因为您不能将一个fd的副本排队到另一个fd。 (没有异步splice(2)
或sendfile(2)
)。 即使有,它也会有一个特定的请求大小,而不是一劳永逸地永久复制。 在AFAIK中,线程已成为执行异步I / O的首选方法,而不是POSIX AIO工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.