C语言:使用system()执行命令时如何设置环境变量

时间:2014-04-17 08:57:07

标签: c linux system

我正在Linux上编写一个C程序,需要用system()执行一个命令,并且在执行该命令时需要设置一个环境变量,但是我不知道如何设置env var使用system()

3 个答案:

答案 0 :(得分:2)

如果要将环境变量传递给与父项不同的子进程,则可以使用getenvsetenv的组合。比如说,您想要向您的孩子传递不同的PATH

#include <stdlib.h>
#include <string.h>

int main() {
    char *oldenv = strdup(getenv("PATH")); // Make a copy of your PATH
    setenv("PATH", "hello", 1); // Overwrite it

    system("echo $PATH"); // Outputs "hello"

    setenv("PATH", oldenv, 1); // Restore old PATH
    free(oldenv); // Don't forget to free!

    system("echo $PATH"); // Outputs your actual PATH
}

否则,如果您只是创建一个新的环境变量,则可以使用setenvunsetenv的组合,如下所示:

int main() {
    setenv("SOMEVAR", "hello", 1); // Create environment variable
    system("echo $SOMEVAR"); // Outputs "hello"
    unsetenv("SOMEVAR"); // Clear that variable (optional)
}

当然,不要忘记检查错误代码。

答案 1 :(得分:1)

使用setenv() api在Linux中设置环境变量

#include <stdlib.h>  
int setenv(const char *envname, const char *envval, int overwrite);

有关详细信息,请参阅http://www.manpagez.com/man/3/setenv/

使用setenv()设置环境变量后,使用system()执行任何命令。

答案 2 :(得分:1)

这应该有效:

#include "stdio.h"

int main()
{
    system("EXAMPLE=test env|grep EXAMPLE");
}

输出

  

实施例=测试