我的程序使用现有的库,文档有限,我无法控制。就本问题而言,其用法如下:
#include <theirlib.hpp>
using their_lib::Node;
int main ( int argc, char** argv )
{
Node my_node;
// connect to the master communication server
my_node.init();
// ...
}
出于众所周知的原因,init()
不接受任何参数,而是尝试从环境变量中查找通信服务器的 URI(以及其他参数)。我可以使用 ltrace
看到这一点:
...
15:43:24 libtheirlib.so->getenv("THEIRLIB_MASTER_URI") = nil <0.000173>
...
现在,我可以用脚本包装我的程序并预先设置环境变量,但是如果我希望能够在运行时更改它们怎么办?我可以使用 setenv()
但这仍然让我觉得污染了环境,如果我想一次连接到多个主服务器怎么办?
我可以选择哪些选项(如果有)来阻止 theirlib
使用环境变量来更改其行为并强制它使用我可以在代码中提供的值?
最佳答案
您的程序将在子 shell 中运行,因此不会“污染环境”——其他进程不会看到您 setenv()
的内容。
关于c++ - 阻止库调用 getenv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843769/