我想编写一个A执行另一个程序的程序B。从它的目录执行程序非常重要B,因为它会打开BB位于同一目录中的程序B。
我的意思是:
./B会工作
./b/B行不通
我想到了两种方法:
- 做
fork(),更改环境中的密码,然后调用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;}
我尝试了两种解决方案,但都没有奏效,我的意思是,我设法执行 program B,但找不到 program BB。我还打印了程序的B密码,它是/home/a/b/- 但仍然无法执行BB。
可能吗?有人可以看到我做错了什么吗?
谢谢