将STDIN重定向到套接字和套接字到STDOUT

时间:2013-03-20 21:13:56

标签: c sockets file-descriptor

我正在尝试为服务器开发一个简单的命令行客户端。连接到服务器并正确设置所有内容后,我想将STDIN重定向到连接到服务器的套接字,并将同一套接字重定向到STDOUT。我希望实现类似于nc工具的行为。

最简单的解决方案是使用select()并使用read() / write()将数据从STDIN传递到套接字,并从套接字传递到STDOUT

有没有其他更简单的方法以某种方式将套接字连接到STDIN / STDOUT?我想到使用dup2()系统调用。但是,我不确定如何使其发挥作用。

感谢。

2 个答案:

答案 0 :(得分:1)

在Linux上,您可以使用splice(2)在内核级别的文​​件描述符之间移动数据。但是,你仍然需要使用select(2)(或等效的)来并行处理这两个方向,或者使用两个线程。

答案 1 :(得分:0)

另一种可能性是在程序中进行协议握手,一旦套接字准备就绪,执行程序为socat以执行数据转发。

例如,调用dup2将套接字复制到文件描述符3中,取消设置其close-on-exec标志,然后执行socat STDIO FD:3