使用system()执行命令时如何设置环境变量?

Wan*_*uma 6 c linux system

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

use*_*016 5

如果要将与父进程不同的环境变量传递给子进程,可以使用getenv和的组合setenv。假设您想将不同的东西传递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
}
Run Code Online (Sandbox Code Playgroud)

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

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

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


Rah*_*obi 2

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

#include <stdlib.h>  
int setenv(const char *envname, const char *envval, int overwrite);
Run Code Online (Sandbox Code Playgroud)

请参阅http://www.manpagez.com/man/3/setenv/了解更多信息。

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