gpt4 book ai didi

c - 如何使用 execvp——查找文件参数

转载 作者:行者123 更新时间:2023-12-03 12:08:16 25 4
gpt4 key购买 nike

我编写了一个测试程序来尝试理解如何使用 execvp(),但我一直遇到问题。我的代码的相关部分是:

...
printf("execute: 'ls -a'\n");
char *args[2];
args[0] = "/bin/ls";
args[1] = "ls";
args[2] = "-a";
...
} else if(pid == 0){ //child process
if(execvp(*args, args) < 0) { //execute command
fprintf(stderr, "Error: execution failed\n");
exit(1);
}
}
...

每当我运行时,都会收到错误“/bin/ls: 无法访问 ls: 没有这样的文件或目录”。 which ls 告诉我/bin/ls 所以我不明白我做错了什么。是因为可执行文件不在我的主目录中,而是在项目文件中吗?

最佳答案

这里有几个问题:

args被定义为一个 2 元素数组,但您要放入 3 个元素,因此您写入的内容超出了数组的末尾。

args数组需要有一个 NULL 指针作为最后一个元素,否则 execvp不知道它何时到达参数列表的末尾。

args 中的第一个元素应该是程序的名称(这就是 ps 列表中显示的内容),后续元素应该是参数。现在的样子,你有ls作为数组中的第二个元素,这意味着它是命令 /bin/ls 的第一个参数。所以ls命令尝试查找名为 ls 的文件在当前目录中但不能。这解释了您收到的错误消息。

应用修复后:

...
printf("execute: 'ls -a'\n");
char *args[3];
char *path = "/bin/ls";
args[0] = "ls";
args[1] = "-a";
args[2] = NULL;
...
} else if(pid == 0){ //child process
if(execvp(path, args) < 0) { //execute command
fprintf(stderr, "Error: execution failed\n");
exit(1);
}
}

关于c - 如何使用 execvp——查找文件参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32634718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com