从C++设置系统变量

Ank*_*rma 4 c++ shell scripting

这个shell脚本

#!/bin/csh
set VAR=12345
echo $VAR
Run Code Online (Sandbox Code Playgroud)

将和平地输出12345在shell.我需要使用C++在代码的某些部分执行相同的操作:

string str = "12345";
retValue="set var1= "+str;      
system(retValue1.c_str());
system("echo $var1");
Run Code Online (Sandbox Code Playgroud)

这不会创建系统变量var1和echos null,这是可以理解的,因为每个系统函数都会创建具有不同环境变量的子进程.所以我使用一个系统函数将它们组合如下......但它再次回声为null.

retValue="set var1= "+str;
retValue1=retValue+";\n echo $var1";
system(retValue1.c_str());
Run Code Online (Sandbox Code Playgroud)

有人可以指导我通过C++设置系统变量.非常感谢提前!

Pau*_*l R 11

看看SETENV<cstdlib>:

#include <cstdlib>

setenv("VAR", "12345", true);
Run Code Online (Sandbox Code Playgroud)

  • +1使用正确的功能.其他几个答案推荐putenv,但不应使用putenv*.setenv是一个更好的界面.特别是,var是一个自动变量的putenv(var)通常会有意想不到的行为. (2认同)

Dav*_*nan 1

您可以使用putenv()

#include <cstdlib>
...
putenv("VAR=12345");
Run Code Online (Sandbox Code Playgroud)

这很方便,但是字符串并没有被复制putenv。这意味着如果您稍后修改它,那么您就修改了环境。这对于文字来说不是问题,但使用的方式形成字符串的方式std::string并不容易与putenv().

另一种选择是使用setenv()

#include <cstdlib>
...
setenv("VAR", "12345", true);
Run Code Online (Sandbox Code Playgroud)

使用setenv(),将创建输入的副本,并且您可以在调用后安全地处理字符串setenv()