我目前正在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); }
解决方法
I’m running
sort < txtFile
in the child process,and in the parent I’m running the command to the right of the pipe.
那么你的shell进程会发生什么?父进程是shell.通过在父进程中运行右侧命令,您可以接管shell的进程.请记住,exec()替换当前进程.
您需要fork()两次,并在子进程中执行管道的两侧.父必须保留shell,然后在呈现下一个命令提示符之前wait()让子进程退出.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。