繁体   English   中英

linux将数据从文件描述符传送到fifo

[英]linux pipe data from file descriptor into a fifo

可以说我知道文件描述符fd在我的进程中已打开供读取。 我想将来fd数据传递到可在进程外读取的fifo ,从而避免在fd上调用pollselect并手动读取/转发数据。 能做到吗?

您是说要求操作系统从现在开始一直在幕后进行此操作? 像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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM