如何使用setenv()在c ++中导出变量?

时间:2013-07-29 16:37:05

标签: c++ command-line setenv

我需要导出几个变量,使它们在命令行中看起来如下所示

export ROS_HOSTNAME=xxx

如何在c ++中使用setenv()来实现呢?

感谢。

3 个答案:

答案 0 :(得分:22)

来自setenv()手册:

  

<强>概要

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

<强>描述
         setenv()函数应在调用进程的环境中更新或添加变量。 envname参数指向包含环境变量名称的字符串          添加或更改。环境变量应设置为envval指向的值。如果envname指向包含'='字符的字符串,则该函数将失败。如果          由envname命名的环境变量已经存在且overwrite的值不为零,该函数将返回成功并且环境将被更新。如果是环境          由envname命名的变量已经存在且overwrite的值为零,该函数将返回成功并且环境将保持不变。

     

如果应用程序修改了environ或它指向的指针,则setenv()的行为是未定义的。 setenv()函数应更新environ的指针列表          分。

     

envname和envval描述的字符串由此函数复制。

     

setenv()函数不需要是可重入的。不需要可重入的函数不需要是线程安全的。

     

返回值
         成功完成后,归零。否则,返回-1,设置errno表示错误,环境不变。

所以你应该打电话给

setenv("ROS_HOSTNAME","xxx",1); // does overwrite

setenv("ROS_HOSTNAME","xxx",0); // does not overwrite

适用于您的情况。取决于,如果您想覆盖可能存在的定义。

注意:

您无法使用setenv()将流程中的变量导出到调用进程(shell)! 使用fork创建的子进程将继承当前进程环境定义,因此也可以继续更改和添加。

答案 1 :(得分:0)

这里是setenv函数的签名

#include <stdlib.h>

int setenv(const char * envname,const char * envval,int overwrite);

链接:http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html

在你的情况下,你这样称呼它:

setenv("ROS_HOSTNAME", "xxx", true);

最后一个boolean参数指示是否要覆盖环境变量的值(如果已存在)。

答案 2 :(得分:0)

这样做

setenv("ROS_HOSTNAME", "xxx", true);

请注意它的概要:

#include <stdlib.h>

int setenv(const char *envname, const char *envval, int overwrite);

有关setenv()的详细信息,请参阅this link