我目前在 C 中实现一个 shell。当我尝试运行这样的命令时,我的问题出现了:
SHELL$: sort < txtFile | grep key
我sort < txtFile
在一个进程(子)中运行,并且在父进程中,即else if(pid > 0)
我在管道右侧运行另一个命令。
该程序运行良好,但它退出了我在 main 中设置的无限循环,以继续接收来自用户的输入。
我该如何解决这个问题?
这是我迄今为止处理管道的代码,我没有包括我必须处理重定向的代码:
c2p 是我为此设置的管道。
if(pid == 0)
{
if( PIPE_FLAG )
{
close(c2p[0]);
if(dup2(c2p[1], STDOUT_FILENO) == -1){
perror("dup2() failed");
exit(2);
}
}
/* Execute command */
execvp(cmd_args[0], cmd_args);
perror("exec failed 1. "); /* return only when exec fails */
exit(-1);
}
else if(pid > 0)
{
if(PIPE_FLAG)
{
close(c2p[1]);
if(dup2(c2p[0], STDIN_FILENO) == -1){
perror("dup2() failed");
exit(-1);
}
execvp(nxt_args[0], nxt_args);
perror("exec failed 2. ");
exit(-1);
}
}
else
{
/* error occurred */
perror("fork failed");
exit(1);
}