C++ 如何防止iostreams::mapped_file_sink创建可执行txt文件

C++ 如何防止iostreams::mapped_file_sink创建可执行txt文件,c++,boost,boost-iostreams,C++,Boost,Boost Iostreams,编辑:代码示例已损坏,它已丢失。是\u open(),请不要使用它。 我有一个相当奇怪的问题。我使用boostiostreams,它们工作得很好,但问题是程序创建的文件是可执行的txt文件(我在ubuntu上,msg是:“lol2.txt”是可执行的文本文件)。 那么有没有办法让它成为一个常规的不可执行文件呢。我想更改代码,使其不会创建可执行文件,我知道我可以在从terminal或Nautilus创建文件后更改该文件。 顺便说一句,这是我正在使用的代码: void write_file(cons

编辑:代码示例已损坏,它已丢失。是\u open(),请不要使用它。 我有一个相当奇怪的问题。我使用boostiostreams,它们工作得很好,但问题是程序创建的文件是可执行的txt文件(我在ubuntu上,msg是:“lol2.txt”是可执行的文本文件)。 那么有没有办法让它成为一个常规的不可执行文件呢。我想更改代码,使其不会创建可执行文件,我知道我可以在从terminal或Nautilus创建文件后更改该文件。 顺便说一句,这是我正在使用的代码:

void write_file(const std::string& name,string data)
{
    iostreams::mapped_file_params params;
    params.new_file_size=data.size();
    params.path=name;
    iostreams::mapped_file_sink file(params);
    memcpy(file.data(),&data[0],data.size());
}

默认情况下,您可以更改进程的文件创建掩码以创建非可执行文件:

umask(getumask() & ~(S_IXUSR | S_IXGRP | S_IXOTH));

请提供一个最小的完整示例程序,用于编译和展示您投诉的行为。请参阅。基本上,将函数write_文件写入程序会导致与在“大”程序中使用它相同的行为。我试过了。发布时间太长了,因为我有一大堆包含和类似的东西,但是我把程序中除了write_文件之外的所有东西都注释掉了,我得到了相同的结果。嗯,我希望这有一个boost参数,但是我在谷歌上搜索了它,没有找到,所以你的解决方案可能是最好的。Tnx