我需要导出几个变量,使它们在命令行中看起来如下所示
export ROS_HOSTNAME=xxx
如何在c ++中使用setenv()来实现呢?
感谢。
答案 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。