当前位置: 首页 > 知识库问答 >
问题:

如何从mingw、c++(或c)中获取和设置环境变量

季博
2023-03-14

我正在编写一个程序,需要从mingw为当前进程设置环境变量(在使用system(...)-call时可用于子进程)。

我知道如何在linux和windows中使用msvc和clang。然而,我找不到任何关于如何使用MingW-G++实现这一点的好的例子。

如何实现具有这种行为的函数?

// Example usage:
void setVar(std::string name, std::string value) {
    // How to do this
}

std::string getVar(std::string name) {
    // ... and this
}

如果您想用c语言回答,请省略std::string:)

编辑:

当使用setenv(linux方式)时,我得到:

src/env.cpp: In function 'void appendEnv(std::string, std::string)':
src/env.cpp:46:5: error: 'setenv' was not declared in this scope; did you mean 'getenv'?
   46 |     setenv(name.c_str(), value.c_str(), 1);
      |     ^~~~~~
      |     getenv

当使用_putenv_s(我在windows上用于msvc和clang的方式)时,我得到了。

src/env.cpp: In function 'int setenv(const char*, const char*, int)':
src/env.cpp:16:12: error: '_putenv_s' was not declared in this scope; did you mean '_putenv_r'?
   16 |     return _putenv_s(name, value);
      |            ^~~~~~~~~
      |            _putenv_r

共有1个答案

阎麒
2023-03-14

从评论中得到启发,我在putenv上找到了这个问题

并设法将这个原型应用程序组合在一起:


#include <cstdlib> // For system(...)

#ifdef __MINGW32__
extern int putenv(char *); // Not defined by mingw
#endif

int main() {
    putenv(const_cast<char *>("x=10"));
    system("set"); // Output variables to se if it works

    return 0;
}

结果输出:

....
x=10

谢谢你的帮助!

 类似资料:
  • 问题内容: 有没有一种方法可以在Linux中使用C设置环境变量? 我尝试了和,但是它们似乎并没有为我工作。 问题答案: 我将在这里做出一个疯狂的猜测,但是这些功能似乎不起作用的正常原因不是因为它们不起作用,而是因为用户并不真正了解环境变量的工作原理。例如,如果我有此程序: 然后我从外壳程序运行它,它不会修改外壳程序的环境- 子进程无法做到这一点。这就是为什么内置可修改环境的shell命令的原因,以

  • 我想在我的Python项目中添加一些全局环境变量。我的想法是添加一个<代码>。env,并设置一些变量,如下所示: 在Python中,我如何能够在我的项目中访问这些变量。在网上,我看到,其中也被导入,但这似乎不起作用。有人知道我如何做到这一点吗?我还可以设置一个文件来包含这些全局变量。或者,如果有更好的Python实践,有人能分享一下吗?

  • 本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 文本编辑器 这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。 文本编辑器的名称和版本在不同的操作系统上可能会有所不同。例如,Notepad 通常用于 Windows 操作

  • 本文向大家介绍C#设置与获取环境变量的方法详解,包括了C#设置与获取环境变量的方法详解的使用技巧和注意事项,需要的朋友参考一下 1.前言 本来想拿学校机房的Android编辑器直接粘到自己电脑上用,发现它的eclipse是32位的,而我的JDK是64位的,于是想到干脆装两个JDK,用C#做一个能够更改环境变量的程序 环境变量是包含关于系统及当前登录用户的环境信息的字符串,一些软件程序使用此信息确定

  • 我想在启动脚本中设置环境变量(如),同时仍然能够仅用一个命令启动应用程序。

  • 问题内容: 如何从Java设置环境变量?我看到我可以使用来对子流程执行此操作ProcessBuilder。不过,我有几个子流程要启动,所以我宁愿修改当前流程的环境,并让这些子流程继承它。 有一个获取单个环境变量的方法。我还可以使用获取Map完整的环境变量集。但是,调用put()该方法Map将引发-显然,这意味着该环境是只读的。而且,没有。 那么,有什么方法可以在当前运行的进程中设置环境变量?如果是