如何阻止iostreams::mapped_file_link创建可执行的txt文件

How to prevent iostreams::mapped_file_sink from creating executable txt files

本文关键字:可执行 文件 创建 txt file 何阻止 iostreams mapped link      更新时间:2023-10-16

EDIT:代码示例已损坏,缺少.is_open(),请不要使用它。我有一个很奇怪的问题。我使用boost iostreams,它们工作得很好,但问题是程序创建的文件是可执行的txt文件(我在ubuntu上,msg是:"lol2.txt"是一个可执行的文本文件。")。那么,有没有办法使它成为一个常规的不可执行文件呢。我想更改代码,这样它就不会创建可执行文件,我知道我可以在从终端或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));