0
我想寫一個程序A
它執行另一個程序B
。 從它的目錄執行程序B
非常重要,因爲它啓動了位於B
的同一目錄中的程序BB
。調用execve()+更改PWD
我的意思是: ./B
將工作
./b/B
將無法正常工作
我想到了兩種方式來完成:
- 做
fork()
,改變PWD在ENV,然後致電execv()
- 做
fork()
,創建一個時間變量,envp
,並呼籲execve()
比方說程序A
就坐落在這裏:/home/a
和程序B
和BB
就坐落在這裏:/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
。
可能嗎? 有人可以看到我是我做錯了嗎?
感謝
我會盡力的!謝謝 – hudac 2013-04-11 23:19:55