我想编写一个程序A
来执行另一个程序B
。
从它的目录执行程序B
非常重要,因为它打开了位于BB
的同一目录中的程序B
。
./B
将有效
./b/B
无效
我想到了两种方法:
fork()
,更改env中的PWD,然后拨打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
的PWD,它是/home/a/b/
- 但仍然无法执行BB
。
有可能吗? 有人能看出我做错了吗?
由于