我正在尝试用C语言编写Shell。我正在尝试实现exit命令,但是在使shell在退出之前执行命令时遇到了问题。
用户可以输入:
> quit
> quit; cat file
> cat file; quit
在退出之前,shell需要在两行中执行cat file命令。
这是我目前拥有的,但是在退出之前没有完成命令。
if(strstr(argument[0], "exit"))
{
if(strcmp(argument[0],"exit")==0)
{
exit(0);
}
int i=0;
while(argument[i] != '\0')
{
strcpy(&command[i], argument[i]);
if(strcmp(command, "exit")==0){i++;}
printf("Argument[i] = %s \n", command);
execvp(command, argument);
i++;
}
exit(0);
}
答案 0 :(得分:2)
您需要一种fork-exec
机制来做到这一点。
exec
个功能族将replace the current process image with a new process image。因此,当您执行一个程序时,您将失去对调用程序的控制。如果您想回来,那么您必须fork
一个孩子,您可以在其中叫一个execv
,让您的父母等到孩子离婚。
这是一个简短的代码段,说明了fork-exec
int pid = my_fork();
if(pid == -1){
printf("failed\n"); // We failed - bail out.
}
else if(pid > 0){ // let the parent wait
int status;
waitpid(pid, &status, 0);
}
else{ // child
execvp(command,argument);
}