【发布时间】:2023-04-29 05:13:02
【问题描述】:
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 命令及其不同类型的建议吗?
【问题讨论】:
-
这个输出是不是给你一个线索:
Vlue of arg[1] =?您正在向ls提供一个空字符串作为参数。也就是说,您正在运行ls ''。手动运行该命令,您将看到相同的结果。您不应该对两个参数进行硬编码。 -
如果我想执行两个单词参数怎么办。我还想执行一些 .c 文件。所以这就是为什么有两个论点。
-
但这不是你要测试的。
ubos>ls。ls命令没有参数。所以你的 shell 需要处理零个参数(一个词)。而且你不能仅仅通过盲目地将第二个 arg 设置为空字符串 (args[1]=arg2;) 来做到这一点。 -
你能给我一些代码吗,我可以在这里做些什么来传递两个参数或一个参数。
-
我已经指出了问题所在。现在不如你自己先试一试,而不是仅仅要求代码?