char *args[41];
char str[41], teststr[41];
const char delimiter[2]=" ";
memcpy(teststr, str, sizeof(str));
args[i]=strtok(teststr, delimiter);
while(args[i]!=NULL)
{
printf("args[%d]=%s\n", i, args[i]);
i++;
args[i]=strtok(NULL, delimiter);
}
这是我用来初始化args []的代码。execvp()系统调用不执行
下面的代码是执行execvp()系统调用。
pid=fork();
if(pid==0)
{
execvp(args[0], args);
}
当我运行代码时,execvp运行几个命令。比如当我尝试执行'ls'命令时,它会工作,但是当我尝试运行'date'命令或'cd'命令时,它不起作用。当我尝试执行'cat'命令时,提示不会显示任何内容,同时也不会显示出来。
'cd'永远不会与'exec'和朋友一起工作,因为这个命令是由于进程无法更改其父进程的工作目录而被内置到shell中的。 'date'也可能是这种情况,但'cat'应该可以正常工作。显然,在你实际显示的代码中,'str'永远不会被实际填充或初始化,所以这根本不应该工作。你也应该使用'strcpy()'来填充'args'(这意味着改变'args'的定义来分配内存),而不是存储指向'strtok()'要修改的字符串的指针。 –
行,但事情是,在猫的情况下,我给命令myshell> cat shell.c其中myshell是我正在创建一个shell。当我运行这个命令时,它会进入子进程但永远不会出现,也不会显示输出。 – Malhar
'''是用于shell重定向的,如果你试图将它作为命令行参数传递,它显然不起作用。 –