所以根据我自己的发现,我知道我需要使用 fork()
和 execvp()
,但我不能完全从任何在线示例中找出如何正确使用 execvp()
。它应该让我基本上运行命令行的东西,但我不明白它需要的参数。就像如果我想运行 ls -a
我如何将它放入 execvp()
?然后就是 exec()
没有返回的问题。我该如何处理?
最佳答案
首先,exec()
不会返回,因为它会导致进程将正在执行的程序替换为 exec()
执行的任何程序。也就是说,如果您在 fork()
之后通过 exec()
运行 ls
,则 ls
的 PID 将是与调用 exec()
的相同。那就是 exec()
不会创建一个新进程,所以它不能返回,因为调用它的程序中的所有内存和代码实际上都消失了,取而代之的是 exec( )
编辑
假设 ls
在 /bin
中,使用 execvp()
运行 ls -a
const char *file = "/bin/ls";
const char *arg1 = "ls";
const char *arg2 = "-a";
const char **argv = {arg1, arg2, NULL};
execvp(file, argv);
关于c - 编写一个程序来像 C 中的命令行一样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32598779/