C shell中的exit命令

C shell中的exit命令,c,linux,shell,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) {

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

您需要一个
fork exec
机制来执行此操作
一个
exec
函数系列将被删除。因此,当您执行一个程序时,您将失去对调用程序的控制。如果您希望返回,则必须
分叉
一个子项,在该子项中,您可以调用
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); 
}


您应该仔细阅读
execvp
的实际功能,为什么调用后不能执行任何代码,以及为什么它通常与
fork()
一起使用。研究现有自由软件外壳的源代码。对它们使用
strace
。阅读:我已经实现了fork-exec模型,它目前可用于执行命令。我遇到的问题是在shell中实现内置命令“quit”。当我输入“quit;cat file”时,shell将不执行命令。它将把它注册为“unrecognized command”,这会打印什么
printf(“参数[i]=%s\n”,command)
退出的情况下;cat文件
?它还没有完全实现。当我试图进入退出;cat文件,它说通过检查execvp找不到命令。但是问题中的代码段显示,您的
printf
必须在
exec
之前执行