我有两个命令cmd1和cmd2,我必须在子节点中执行cmd1,将输出重定向到另一个子节点,然后使用cmd1的输出执行cmd2作为论据。然后,我必须将输出重定向到与套接字连接的远程客户端(telnet)。我无法弄清楚问题,但我的解决方案不会将cmd1输出重定向到cmd2。使用fork,execvp然后重新输出到套接字的两个命令的管道
if(fork() == 0)
{
//Process to compute cmd1
char *arg[2];
arg[0] = cmd1;
arg[1] = NULL;
dup(piped[1]);
close(piped[0]);
close(piped[1]);
execvp(cmd1,arg);
}
if(fork() == 0)
{
//Process to compute cmd2
dup2(newsockfd,STDOUT_FILENO);
dup2(newsockfd,STDERR_FILENO);
char *arg[2];
arg[0] = cmd2;
arg[1] = NULL;
dup(piped[0]);
close(piped[0]);
close(piped[1]);
execvp(cmd2,arg);
}
只是要清楚。这个问题是不是在插座inizilization或管道,这就是为什么我只报告主要部分
为什么你会想到什么东西从CMD1重定向?您不会对该子进程的输入或输出做任何事情。 –
这就是问题所在。如何调试代码,例如显示execvp(cmd1,arg)输出的printf;在第二个孩子? –