我有一个套接字,我正在对其执行 select()
,等待其他进程写入。
一旦写入,我就读取数据,并将其写入另一个文件描述符。
我的问题是,如果有一种方法可以将套接字桥接到文件描述符,那么当数据准备就绪时,它会自动写入另一个文件描述符?
这样,我就可以抛出我正在使用的缓冲区,并在系统中省略一个线程。
最佳答案
在 linux 上,当方向是从套接字到文件时,使用 splice()
可能更合适。使用 splice()
有点复杂,但您可以双向使用。另外,我认为 sendfile 使用 splice internally这些天。
SO 上已经有很多问题在讨论 splice() 和 sendfile() 之间的区别。搜索网络还揭示了关于 splice 的作用(源和目标)的相互矛盾的陈述。了解它是否适合您的情况的最好方法是对其进行测试。
关于兼容的文件系统:Which file systems support splicing via Linux's splice(2)?
关于不支持 TCP 套接字拼接的旧内核:Does Linux's splice(2) work when splicing from a TCP socket?
关于c - 桥接两个文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15355069/