在C中实现shell

在C中实现shell,第1张

概述我目前正在C中实现一个 shell. 当我尝试运行这样的命令时,我的问题出现了: SHELL$: sort < txtFile | grep key 我正在运行sort< txtFile在进程(子进程)和父进程中,否则if(pid> 0)我正在运行管道右侧的另一个命令. 程序运行正常,但它退出我在main中设置的无限循环以继续接收来自用户的输入. 我怎么能解决这个问题? 这是我到目前为止处理管道的 我目前正在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);}
@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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1240533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存