我想编写一个程序A,它执行另一个程序B。从它的目录执行程序B非常重要,因为它打开了位于B目录中的程序BB。
我是说:./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。
有可能吗?有人能看出我做错了什么吗?
谢谢
发布于 2013-04-11 16:21:30
您正在寻找chdir()而不是envp操作。
https://stackoverflow.com/questions/15953880
复制相似问题