繁体   English   中英

将STDIN重定向到套接字,并将套接字重定向到STDOUT

[英]Redirect STDIN to socket and socket to STDOUT

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

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

还有其他更简单的方法可以将套接字连接到STDIN / STDOUT? 我考虑过使用dup2()系统调用。 但是,我不确定如何使它工作。

谢谢。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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