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

发布于 2024-11-10 10:32:16 字数 527 浏览 0 评论 0原文

编辑:代码示例已损坏,缺少 .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());
}

EDIT: code sample is broken, it is missing .is_open(), please DON'T use it.
I have a rather strange question. I use boost iostreams and they work awesome, but the problem is that files that program creates are executable txt files(I'm on ubuntu,msg is :""lol2.txt" is an executable text file.").
So is there any way to make it a regular nonexecutable file. I would like to change the code so that it doesnt create executable, files I know I can change the file after it is created from terminal or Nautilus.
btw this is the code that I'm using:

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());
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迎风吟唱 2024-11-17 10:32:16

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

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

You can change the file creation mask of your process to create non-executable files by default:

umask(getumask() & ~(S_IXUSR | S_IXGRP | S_IXOTH));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文