我正在用C语言编写两个程序(一个客户端,一个服务器),它们通过UNIX套接字相互通信。我们的想法是客户端向服务器发送命令,如ls -l
,服务器创建一个孩子(fork()
),孩子做execlp(...,command,...)
和execlp
的输出放在客户端的终端窗口中。
但是,就像现在一样,我发送给服务器的命令的输出写在服务器的终端窗口中,而不是客户端。有没有办法从execlp
获取输出并通过带send(..,string,...)
的套接字发送给客户端?
我想坚持使用套接字而不是管道(我发现所有类似的问题都有建议管道的答案)。
答案 0 :(得分:2)
之前的回答是错误的;出于某种原因,我的思想固定在管道上。正如Jonathan Leffler在评论中指出的那样,你可以更优雅地实现这一目标。
fork
一个等待它的新孩子子代使用套接字替换其文件描述符:
dup2(sockfd, STDIN_FILENO); /* Check the return value for these. */
dup2(sockfd, STDOUT_FILENO);
dup2(sockfd, STDERR_FILENO);
根据客户要求,孩子execvp
是新计划