簡體   English   中英

調用execve()+更改PWD

[英]calling execve() + changing PWD

我想寫一個執行另一個程序B的程序A 從它的目錄執行程序B非常重要,因為它打開了位於B的同一目錄中的程序BB

我的意思是: ./B會起作用

./b/B不起作用

我想過兩種方法:

  1. 執行fork() ,更改env中的PWD,然后調用execv()
  2. fork() ,創建時態變量, envp ,並調用execve()

讓我們說程序A在這里: /home/a ,程序BBB坐在這里: /home/a/b

這是我在/home/a的程序代碼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

可能嗎? 有人能看出我做錯了嗎?

謝謝

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM