调用execve()+更改PWD

时间:2013-04-11 16:17:39

标签: c++ exec environment-variables

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

我的意思是: ./B将有效

./b/B无效

我想到了两种方法:

  1. 执行fork(),更改env中的PWD,然后拨打execv()
  2. 执行fork(),创建时态变量envp,然后调用execve()
  3. 假设程序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

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

    由于

1 个答案:

答案 0 :(得分:2)

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