C,UNIX。通过UNIX套接字从execlp发送输出

时间:2014-02-12 17:32:04

标签: c sockets unix output

我正在用C语言编写两个程序(一个客户端,一个服务器),它们通过UNIX套接字相互通信。我们的想法是客户端向服务器发送命令,如ls -l,服务器创建一个孩子(fork()),孩子做execlp(...,command,...)execlp的输出放在客户端的终端窗口中。

但是,就像现在一样,我发送给服务器的命令的输出写在服务器的终端窗口中,而不是客户端。有没有办法从execlp获取输出并通过带send(..,string,...)的套接字发送给客户端?

我想坚持使用套接字而不是管道(我发现所有类似的问题都有建议管道的答案)。

1 个答案:

答案 0 :(得分:2)

之前的回答是错误的;出于某种原因,我的思想固定在管道上。正如Jonathan Leffler在评论中指出的那样,你可以更优雅地实现这一目标。

  • 当一个新连接出现时,fork一个等待它的新孩子
  • 子进程从父进程继承套接字,父进程将其关闭
  • 子代使用套接字替换其文件描述符:

    dup2(sockfd, STDIN_FILENO);  /* Check the return value for these. */
    dup2(sockfd, STDOUT_FILENO);
    dup2(sockfd, STDERR_FILENO);
    
  • 根据客户要求,孩子execvp是新计划