void main() {
char *args[MAX_LINE];
char arg1[MAX_LINE/2] = "\0";
char arg2[MAX_LINE/2] = "\0";
printf("ubos>");
fflush(stdout);
fgets(arg1, sizeof(arg1), stdin);
arg1[strlen(arg1) - 1] = '\0';
fgets(arg2, sizeof(arg2), stdin);
arg2[strlen(arg2) - 1] = '\0';
abc:
printf("You typed: %s %s\n", arg1, arg2);
fflush(stdin);
args[0] = arg1;
args[1] = arg2;
args[2] = '\0';
int i = 0;
for (i = 0; i < MAX; i++) {
printf("Vlue of arg[%d] =%s\n", i, args[i]);
}
if (strcmp(args[0], "ls") == 0) {
execvp(args[0], args);
goto abc;
} else
if (strcmp(args[0], "ps") == 0) {
}
printf("Something is not correct...\n");
exit(0);
}
当我使用ls
命令运行此代码时,这就是结果。我不知道这段代码有什么问题。当我运行此代码以执行另一个.c
文件时,它会完美执行,但是当我尝试使用ls
或ps
命令时,它不会让我使用它并抛出错误。
我还有一个问题,为什么这个goto
在这个程序中不起作用。
ubos>ls
You typed: ls
Vlue of arg[0] =ls
Vlue of arg[1] =
Vlue of arg[2] =(null)
ls: cannot access : No such file or directory
所以这是我的错误,你可以给我一些关于如何使用 exec 命令及其不同类型的建议。
答案 0 :(得分:0)
如果他们没有提供参数,请将args
中的参数设置为0
。然后ls
将不会收到一个空字符串作为它的第一个参数,它根本不会得到任何参数。
args[0] = arg1;
if (strlen(arg2) == 0) {
args[1] = 0;
} else {
args[1] = arg2;
args[2] = 0;
}
您还需要在打印所有参数的循环中检查这一点。
for(i=0;i<MAX && arg[i];i++)
{
printf("Value of arg[%d] =%s\n",i, args[i]);
}
答案 1 :(得分:-1)
if (strlen(arg2) == '\0')
{
args[0] = arg1;
args[1] = '\0';
}
else
{
args[0] = arg1;
args[1] = arg2;
args[2] = 0;
}
for(i=0;i<MAX && args[i];i++)
{
printf("Vlue of args[%d] =%s\n",i, args[i]);
}
我将空格作为第二个参数传递。所以它向我显示错误。上面的代码是我的问题的解决方案..