0

我想编写一个A执行另一个程序的程序B。从它的目录执行程序非常重要B,因为它会打开BB位于同一目录中的程序B

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

./b/B行不通

我想到了两种方法:

  1. fork(),更改环境中的密码,然后调用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;}

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

可能吗?有人可以看到我做错了什么吗?

谢谢

4

1 回答 1

2

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

于 2013-04-11T16:21:30.037 回答