c - 桥接两个文件描述符

标签 c linux sockets file-descriptor

我有一个套接字,我正在对其执行 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?

拼接解释: http://kerneltrap.org/node/6505

拼接来源: http://lxr.linux.no/#linux+v3.8.2/fs/splice.c

关于c - 桥接两个文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15355069/

相关文章:

c - 是否有必要将动态数组的容量加倍?

c++ - "Proper C++ solution"-- 使用 C++ 时,C 风格的逻辑是 'bad' 吗?

c - 如何从可执行文件中恢复源代码?

c++ - zlib.h :34:19: fatal error: zconf. h:没有这样的文件或目录#include "zconf.h"

vb.net - 如果我的服务器重新启动,如何将客户端套接字重新连接到我的服务器

c - 如何配置 Eclipse 使用 -std=c99 进行编译?

c - 指向结构的指针数组,调试时只有 SIGSEGV

linux - 如何获取有关configure.ac中使用的MACRO的完整信息

linux - 可以发送功能 block

c++ - 如何使用 getnameinfo 而不是 gethostbyname?