当我尝试运行这样的命令时,我的问题出现了:
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);}@H_301_17@解决方法
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()让子进程退出.
@H_301_17@ @H_301_17@ 总结以上是内存溢出为你收集整理的在C中实现shell全部内容,希望文章能够帮你解决在C中实现shell所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)