我有一个打开的套接字,它连接一个客户端和服务器。更改文件描述符以将STDOUT管道传输到套接字?
我正在实现远程执行,所以我想要更改文件描述符表,以便通常会转到stdout的调用实际上通过套接字输出到客户端。
现在我有服务器分叉,然后使用system()命令来执行任何命令。
操作文件描述符表我需要做些什么?
这是我正在使用的代码:
我正在使用select。我使用的套接字是由accept调用返回的套接字(这是所有服务器端)。
dup2(S,1);
int retval = fork();
if (retval > 1)
{
system(receive.text);
return 0;
}
现在这样的结果,是没有文本打印服务器(因此它显然没有涉足服务器的标准输出),但也不是显示在客户端上的任何东西)。
我是否还需要在客户端做更多的事情才能解决问题(比如recv()调用?),并且我使用正确的套接字吗?
谢谢。
是1 stdout还是0? – Blackbinary 2011-04-04 01:31:40
@blackbinary,你让我很后悔只是使用一个整数而不是'STDOUT_FILENO' :) - '0'是stdin,'1'是stdout,而'2'是stderr;由于shell重定向的'2>&1'风格,我发现它更容易记忆 - 您几乎不会重定向'0',因此必须输入。 :) – sarnold 2011-04-04 01:37:00
好吧,那么我看到的页面有一个错字(有0而不是1)。我将在原文中发布一些代码,因为它仍然不正确。 – Blackbinary 2011-04-04 01:41:25