簡體   English   中英

使用system()執行命令時如何設置環境變量?

[英]How to set an environment variable when using system() to execute a command?

我正在 Linux 上編寫 C 程序,需要使用system()執行命令,並且在執行該命令時需要設置環境變量,但我不知道在使用system()時如何設置環境變量。

如果要將環境變量傳遞getenv父進程不同的子進程,可以結合使用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)
}

當然,不要忘記檢查錯誤代碼。

在 Linux 中使用setenv() api 設置環境變量

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

有關詳細信息,請參閱http://www.manpagez.com/man/3/setenv/

使用setenv()設置環境變量后,使用system()執行任何命令。

這應該有效:

#include "stdio.h"

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

產出

示例=測試

暫無
暫無

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

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