gpt4 book ai didi

c++ - 调用 execve() + 更改 PWD

转载 作者:行者123 更新时间:2023-11-28 03:19:13 47 4
gpt4 key购买 nike

我想写一个程序A执行另一个程序 B .执行程序很重要B从它的目录,因为它打开程序 BB谁坐在B的同一目录中.

我的意思是: ./B会工作

./b/B行不通

我想到了两种方法:

  1. fork() ,更改env中的PWD,然后调用execv()
  2. fork() ,创建一个时间变量,envp , 并调用 execve()

假设程序 A坐在这里:/home/a , 和程序 BBB坐在这里:/home/a/b

这是我的程序代码 A谁坐在/home/a

#include <iostream>
#include <errno.h>

int main() {

int pid;
char *cmd[20] = {"/home/a/b/B", NULL};

if ((pid = fork()) == 0) {

/*if (putenv("PWD=/home/a/b") < 0) {
fprintf(stderr, "error PWD%s\n", strerror(errno));
}*/

char *envp[20] = {"PWD=/home/a/b", NULL};

execve( cmd[0], cmd, envp);

fprintf(stderr, "error: execv: %s\n", strerror(errno));
exit(0);
} else if (pid < 0) {
fprintf(stderr, "error: fork: %s\n", strerror(errno));
exit(0);
}

fprintf(stderr, "father quits\n");

返回0;

我尝试了两种解决方案,但都没有用,我的意思是,我设法执行程序 B , 但找不到程序 BB .我还打印了程序的 B是 PWD,它是 /home/a/b/ - 但它仍然无法执行 BB .

这可能吗?有人能看出我做错了什么吗?

谢谢

最佳答案

您正在寻找chdir()而不是 envp 操作。

关于c++ - 调用 execve() + 更改 PWD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15953880/

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