如何以编程方式更改进程的执行PATH?

时间:2011-11-21 21:03:52

标签: c++ path environment

我正在开发一个迷你shell,我正在尝试动态设置执行路径。 我使用setvar()来设置PATH,当我用getvar()检查它时,它会读取新的PATH。 以下是我试图执行的两件事:
1.我将PATH更改为/bin,我知道其中包含大多数系统功能,但没有程序可以正常工作。我还可以验证路径是否已在环境中设置。我使用execvp()执行命令 2.然后我使用extern char** environ来获取环境并将其传递到execvpe()但它仍然不起作用。

1 个答案:

答案 0 :(得分:0)

我通过使用istringstream手动搜索PATH然后使用它来执行该过程来解决这个问题:

string dir;
string path = get_var("PATH");
istringstream search(path);
while(search.good()) {
    getline(search, dir, ':');
    if(dir != "") {
        struct stat st;
        if(dir[dir.length()] != '/') dir.append("/");
        string file = dir + cmdArg[0];
        //is file in dir?
        if(stat(file.c_str(), &st) == 0) {
            execvp(file.c_str(), cmdArg);
        }
    }
}