我在 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/