C 无效的时间间隔&;在我正在创建的基本shell中

C 无效的时间间隔&;在我正在创建的基本shell中,c,shell,C,Shell,所以我创建了一个基本的shell。我拨叉并呼叫execvp。如果某个命令(即sleep&)最后有“&”,则我的父进程不会等待子进程。否则,它会。因此在子进程中,我调用execvp(args[0],args)。如果args是sleep 5m&,我如何删除&以便子进程只读取sleep 5m,而不读取-,因为我猜这就是问题的根源 if(pid==0){ execvp(args[0],args); } //if parent process if(!(strcmp(args[0],"&")

所以我创建了一个基本的shell。我拨叉并呼叫execvp。如果某个命令(即
sleep&
)最后有“&”,则我的父进程不会等待子进程。否则,它会。因此在子进程中,我调用
execvp(args[0],args)
。如果args是
sleep 5m&
,我如何删除&以便子进程只读取
sleep 5m
,而不读取-,因为我猜这就是问题的根源

if(pid==0){
   execvp(args[0],args);
}
//if parent process
if(!(strcmp(args[0],"&")==0)){
  wait(0);
}
编辑:我可以通过使用一个标志来解决这个问题,如果用户输入包含&,我就打开了标志。现在它起作用了

char *idx = strrchr(cmd, '&');
if(idx != NULL)
    *idx = '\0';
查找字符串中的最后一个(&F),并将其替换为“0”(字符串末尾)


在字符串中找到最后一个&并将其替换为“0”(字符串末尾)

仅用散文描述代码几乎永远不够清晰(散文与代码不同,可以用多种方式解释)。请展示一段说明问题的代码。您编写的代码是什么???请至少发布您遇到问题的代码片段。那样的话,我们可以帮你做得更好。简单的搜索是一个非常糟糕的主意。如果
&
是转义的或是字符串文本,该怎么办?您需要正确解析输入。在设计解释器(shell)时,语句的实际执行是较少的工作;并非原始命令行中的所有语法都成为子进程的参数材料!例如,
>文件
变为标准输出的重定向,而不是参数
“>”
“文件
”。并不是所有的命令行材料都会一字不差地变成参数材料。例如,
$VAR
必须转换为变量的扩展值(如果没有引号,则可能有多个参数)等等。基本上,shell是一种分析、扩展和解释命令行以及综合命令调用的语言。仅仅用散文描述代码几乎永远不够清晰(散文与代码不同,可以用多种方式解释)。请展示一段说明问题的代码。您编写的代码是什么???请至少发布您遇到问题的代码片段。那样的话,我们可以帮你做得更好。简单的搜索是一个非常糟糕的主意。如果
&
是转义的或是字符串文本,该怎么办?您需要正确解析输入。在设计解释器(shell)时,语句的实际执行是较少的工作;并非原始命令行中的所有语法都成为子进程的参数材料!例如,
>文件
变为标准输出的重定向,而不是参数
“>”
“文件
”。并不是所有的命令行材料都会一字不差地变成参数材料。例如,
$VAR
必须转换为变量的扩展值(如果没有引号,则可能有多个参数)等等。基本上,shell是一种解析、扩展和解释命令行的语言,并合成命令调用。OOPS——太多的C++编程TXI理解这是在做什么,但不知道该写在哪里。我正在将args[0]传递给execvp。是否有方法从参数本身删除“&”。不应修改参数。复制(使用StrcPy)你想要转换的字符串——太多C++编程TXI理解这是在做什么,但是我不确定在哪里写。我正在将args[0]传递给execvp。是否有方法从参数本身删除“&”。不应修改参数。复制(使用strcpy)要更改的字符串