我需要创建一个程序,从用户那里获取输入并像在终端中一样执行它。我正在使用execvp()
函数来实现此目的。除非遇到quit
调用,否则程序的要求是继续从用户那里获取输入。这里的问题是在execvp()
调用后替换当前程序。因此,使用goto
也不是一种选择。我发现了这篇Fork–exec文章,但它没有说明如何创建无限数量的进程。这是我的代码:
#include <unistd.h>
#include <stdio.h>
#include <string.h>
void main() {
char *args[4];
char inputCommand[100];
fgets (inputCommand, 100, stdin);
printf ("Splitting string \"%s\" into tokens:\n",inputCommand);
/* Perfrom string tokenization here */
execvp(args[0], args);
}
答案 0 :(得分:2)
fork()
可以无限次调用;只要返回值表明您是父进程,就可以继续照常操作并再次调用。
因此,您可以拥有一个循环,在您循环的过程中,如果您是子进程,则调用execvp()
,如果您是父进程,则继续下一次迭代。
答案 1 :(得分:1)
Execvp使用您运行的命令替换当前进程映像。所以它取消了你的C程序。要产生所需的效果,你应该在execvp之前进行分叉。它看起来像这样:
int status = 0;
pid_t pid = fork();
if(pid > 0) {
waitpid(pid, &status, 0);
// is parent
} else if(pid == 0) {
execvp(*args, args);
// is child
} else {
// fork didn't work
}