3

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

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

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

谢谢。

4

2 回答 2

1

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

于 2013-03-21T10:43:28.200 回答
0

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

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

于 2013-03-21T13:51:53.203 回答