我目前正在C中实现一个
shell.
当我尝试运行这样的命令时,我的问题出现了:
当我尝试运行这样的命令时,我的问题出现了:
SHELL$: sort < txtFile | grep key
我正在运行sort< txtFile在进程(子进程)和父进程中,否则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); }