c - 编写一个程序来像 C 中的命令行一样工作

标签 c unix

所以根据我自己的发现,我知道我需要使用 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/

相关文章:

c - 使用结构体分配内存时出现段错误

c - 一对 uint64 值的长乘法

unix - zsh 中的 LANG 环境变量

linux - 在将 tail -f 的输出通过管道传输到 grep 后写入文件

c - 遍历字符数组以查找字母表中每个字母的出现

c - 指向数组的指针,分配数组

c - C 库的公共(public)头文件是否应该#include 其他带有双引号或尖括号的头文件?

c - 如何在 makefile 构建中启用 "#ifndef/#endif" block ?

bash - 将交互式 session 通过管道传输到文件

c - 注意到 linux 中的一个进程没有显示在进程列表中,这是怎么发生的?