将stdout和stderr重定向到套接字以获取分布式shell程序

y3d*_*3di 5 c sockets client-server exec

我制作了一个分布式shell程序,它有一个客户端和服务器.客户端向服务器发送命令请求,服务器在本地执行该命令,并且应该将该命令的结果输出到客户端.我无法弄清楚如何将stdout/stderr重定向到客户端.我使用execvp来执行命令.

我想我可能要使用dup2?但我无法弄清楚如何正确使用它.有帮助吗?

Dmi*_*tri 7

您只需要使用dup2()将套接字的文件描述符复制到stderr和stdout文件描述符上.这与重定向到管道几乎是一回事.

cpid = fork();
if (cpid == 0) {
  dup2(sockfd, STDOUT_FILENO);
  dup2(sockfd, STDERR_FILENO);
  execvp(...);
  /*... etc. etc. */
Run Code Online (Sandbox Code Playgroud)