首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用execve() +更改PWD

调用execve() +更改PWD
EN

Stack Overflow用户
提问于 2013-04-11 16:17:39
回答 1查看 726关注 0票数 0

我想编写一个程序A,它执行另一个程序B。从它的目录执行程序B非常重要,因为它打开了位于B目录中的程序BB

我是说:./B会起作用的

./b/B不能工作

我想了两种方法:

  1. 执行fork(),在env中更改PWD,然后调用execv()
  2. 执行fork(),创建一个时态变量envp,并调用execve()

假设程序A在这里:/home/a,而程序BBB坐在这里:/home/a/b

这是我的程序代码A,他坐在/home/a

代码语言:javascript
复制
#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

有可能吗?有人能看出我做错了什么吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-11 16:21:30

您正在寻找chdir()而不是envp操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15953880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档