C shell中的exit命令
我正在尝试用C语言编写一个shell。我试图实现exit命令,但在让shell在退出之前执行命令时遇到问题 用户可以输入: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) {
> 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
之前执行