c++ - 阻止库调用 getenv?

标签 c++ environment-variables

我的程序使用现有的库,文档有限,我无法控制。就本问题而言,其用法如下:

#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/

相关文章:

c++ - C : var was not declared in this scope

linux - 如何重置所有环境变量?

python - Git-Bash 正在插入环境变量

preprocessor - VC6 设置附加包含使用环境变量的路径?

c++ - 如何在传递给 C/C++ 宏之前解析 int 变量?

c++ - 关于类模板的friend的一些问题

c++ - 错误 : argument of type "void (opca_hello::)()" does not match "void* (*)(void*)"

C++ 使用 Boost.asio 和 Beast 库在正文中发送数据

docker - 使用 docker run echo 环境变量

reactjs - 如何设置由 Cypress 运行的浏览器中可用的 process.env 变量