【发布时间】:2016-10-07 09:24:33
【问题描述】:
我正在使用 Boost 库创建一个 C++ 应用程序,所以我开发了模块但卡在这里。
我想使用 boost 库创建和修改系统变量(或即使在进程终止后仍然存在的本地环境变量)。 有像
这样的方法setenv() putenv() 获取环境()
但他们会进行本地更改,并且在进程终止后该值会消失。
这不是真正的问题。当我想在 linux 和 mac 平台上运行相同的代码时,真正的问题就出现了。
- 我能否使用 C++ 和可以创建、修改和删除路径变量的库制作跨平台代码? 如果没有
- 我可以为特定平台(例如 Windows)制作具有上述要求的代码吗?
到目前为止,我有这段代码为 windows 设置环境变量,但它给出了错误
#include <string>
#include <iostream>
#include <boost/asio.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream.hpp>
#include <process/boost/process.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/system/error_code.hpp>
namespace bp = boost::process;
namespace bpi = boost::process::initializers;
namespace bio = boost::iostreams;
int main()
{
char* str="SETX Name Value";
bp::pipe p = bp::create_pipe();
{
bio::file_descriptor_sink sink(p.sink, bio::close_handle);
boost::filesystem::path p("C:/Windows/System32/cmd.exe");
boost::system::error_code ec;
bp::windows::execute(bpi::run_exe(p),
bpi::set_cmd_line(str),
bpi::bind_stdout(sink),
bpi::set_on_error(ec)
);
}
bio::file_descriptor_source source(p.source, bio::close_handle);
bio::stream<bio::file_descriptor_source> is(source);
std::string s;
is >> s;
std::cout << s << std::endl;
std::cin.get();
return 0;
}
【问题讨论】: