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

标签 c linux system

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

最佳答案

如果你想传递一个不同于父进程的环境变量给你的子进程,你可以使用 getenv 的组合。和 setenv .比如,您想将不同的 PATH 传递给您的 child :

#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
}

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

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

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

关于c - 使用 system() 执行命令时如何设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23128737/

相关文章:

java - 我想通过一个按钮重启我的 Android 平板电脑

c# - 我无法摆脱System.Range.get_Start错误

c++ - 运行系统进程

c - 如何让编译器选择标志更新 ARM 指令?

c - 打印标准输入中的每一行

node.js - USB-to-RS485 使用 Nodejs

c++ - 性能 32 位与 64 位算术

linux - 如何按第三列中的数字对数据进行排序?

c - 带 4x4 矩阵键盘的 16X2 LCD 屏蔽

c - C 结构中的自引用