我正在用 C 编写一个简单的 shell。用户输入命令并将它们存储在二维数组中,例如:
SHELL$ ls ; date ; ls
// This is parsed into the following
char* commands[1000] = {"ls", "date", "ls"};
如果在整个程序中我没有该输入的特定角色,我有一个 for 循环将数组的每个元素传递给系统 - 我没有 ls 和日期的特定角色:
if (did_not_process == 0)
system(commands[i]);
现在我想将 system() 转换为 execvp() 并具有完全相同的功能。这是我的方法无法正常运行:
if (did_not_process == 0) {
command[0] = commands[i];
command[1] = NULL;
if (fork() == 0) {
execvp(command[0], command);
} else {
wait(NULL); //wait for child to complete?
}
}
唯一的问题是,当我通过 shell 的进一步迭代(一个简单的 while 循环)时,它会零星且无法控制地打印执行。问题出在我展示的代码中,但我不知道在哪里。
这是示例输出:
SHELL$ ls;date;ls
file
Mon Jul 16 13:42:13 EDT 2012
file
SHELL$ ls
SHELL$ file
第一次工作,然后在与 shell 输入相同的行上打印文件。