我需要导出几个变量,使它们在命令行中如下所示
export ROS_HOSTNAME=xxx
如何在 C++ 中使用 setenv() 来实现这一目标?
Thanks.
来自setenv()
手动输入:
SYNOPSIS
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);
描述
setenv() 函数应在调用进程的环境中更新或添加变量。 envname 参数指向一个包含环境变量名称的字符串
被添加或更改。环境变量应设置为 envval 指向的值。如果 envname 指向包含“=”字符的字符串,该函数将失败。如果
envname 命名的环境变量已存在且 overwrite 的值不为零,函数应返回成功并更新环境。如果环境
envname 命名的变量已存在且覆盖值为零,函数应返回成功,环境保持不变。
如果应用程序修改了环境或其指向的指针,则 setenv() 的行为是未定义的。 setenv() 函数应更新指向哪个环境的指针列表
点。
该函数复制 envname 和 envval 描述的字符串。
setenv() 函数不需要是可重入的。不需要可重入的函数不需要是线程安全的。
返回值
成功完成后,应返回零。否则,返回-1,设置errno表示错误,环境不变。
所以你应该打电话
setenv("ROS_HOSTNAME","xxx",1); // does overwrite
or
setenv("ROS_HOSTNAME","xxx",0); // does not overwrite
对于你的情况。取决于您是否想覆盖可能存在的定义。
NOTE:
你不能使用setenv()
将变量从进程导出到调用进程(shell)!
使用 fork 创建的子进程将继承当前进程环境定义,因此您的更改和添加也将继承。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)