Shell中的退出命令

时间:2019-04-09 02:56:52

标签: c linux shell

我正在尝试用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);
}

1 个答案:

答案 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); 
}