【发布时间】:2013-11-25 08:03:59
【问题描述】:
我目前正在用 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);
}
【问题讨论】:
-
@KerrekSB 感谢您的反馈,但我正试图弄清楚我的代码发生了什么。非常感谢您的回答
-
你在父子进程中都调用了
exec,所以shell本身已经不存在了。