2013-04-11 69 views
0

我想寫一個程序A它執行另一個程序B。 從它的目錄執行程序B非常重要,因爲它啓動了位於B的同一目錄中的程序BB調用execve()+更改PWD

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

./b/B將無法​​正常工作

我想到了兩種方式來完成:

  1. fork(),改變PWD在ENV,然後致電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的密碼,它的密碼是/home/a/b/ - 但它仍然不能執行BB

可能嗎? 有人可以看到我是我做錯了嗎?

感謝

回答

2

您正在尋找chdir()代替envp操作。

+0

我會盡力的!謝謝 – hudac 2013-04-11 23:19:55