我需要导出几个变量,使它们在命令行中如下所示
export ROS_HOSTNAME=xxx
如何在 C++ 中使用 setenv() 来实现这一点?
谢谢。
我需要导出几个变量,使它们在命令行中如下所示
export ROS_HOSTNAME=xxx
如何在 C++ 中使用 setenv() 来实现这一点?
谢谢。
从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() 函数将更新环境指向的指针列表。
由 envname 和 envval 描述的字符串由该函数复制。
setenv() 函数不需要是可重入的。不需要可重入的函数不需要是线程安全的。
返回值
成功完成后,应返回零。否则返回-1,设置errno表示错误,环境不变。
所以你应该打电话
setenv("ROS_HOSTNAME","xxx",1); // does overwrite
或者
setenv("ROS_HOSTNAME","xxx",0); // does not overwrite
对于你的情况。取决于,如果你想覆盖一个可能存在的定义。
笔记:
您不能使用setenv()
将变量从进程导出到调用进程(shell)!使用 fork 创建的子进程将继承当前进程环境定义,因此也将继承您的更改和添加。
这样做:
setenv("ROS_HOSTNAME", "xxx", true);
请注意它的概要:
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);
有关更多详细信息,请参阅此链接setenv()
。
这里是 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);
最后一个布尔参数指示是否要覆盖环境变量的值(如果它已经存在)。