【发布时间】:2019-09-22 21:47:50
【问题描述】:
我正在编写一个 C 程序,它接受参数 char *argv[] 来决定运行哪个 exec()。我有execlp(argv[1], argv[1], NULL) 可以正常工作。由于某种原因execvp(argv[1], argv) 找不到要运行的“ls”命令。我真正需要的是,如果我有多个参数,不包括调用./filexec,我可以运行exec(),它将采用char* argv[],而不包括文件路径。我了解到execvp() 有能力做到这一点。
我在 ssh linux 服务器上运行它。
int main(int argc, char *argv[])
{
pid_t pid;
/* fork a child process */
pid = fork();
if (pid < 0) {/* error occured */
fprintf(stderr, "Fork Failed");
return 1;
}
else if (pid == 0) {/* child process */
//pass the right thing to the right exec?
if (argc == 1)
{
printf("CHILD started. No arguments provided. Terminating child.\n");
}
if (argc == 2)
{
printf("CHILD started. One argument provided. Calling execlp().\n");
execlp(argv[1],argv[1],NULL);
}
if (argc >= 3)
{
printf("CHILD started. More than one argument provided. Calling execvp().\n");
argv[argc++] = NULL;
execvp(argv[1],argv);
}
}
else {/* parent process */
/* parent will wait for the child to complete */
printf("PARENT started, now waiting for processID#%u\n", getpid());
wait(NULL);
printf("PARENT resumed. Child exit code of 0. Now terminating parent.\n");
}
return 0;
}
我希望给./a.out ls -l 打电话给execvp()
给予:
total XXX
info ---------filename
info ---------filename
等等
【问题讨论】: