我想编写一个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
。
可能吗?有人可以看到我做错了什么吗?
谢谢