boost::filesystem::unique_path() 如何解决 C++ 中 mkstemp 类似物的需求?

2024-04-22

An old 功能要求 https://svn.boost.org/trac/boost/ticket/590对于 Boost 来说,请求的功能类似于mkstemp http://pubs.opengroup.org/onlinepubs/009695399/functions/mkstemp.htmlPOSIX 函数在 Boost.Filesystem 中可用。该问题早已解决并发表评论

版本 3 中的 unique_path() 函数解决了这个问题。

但我不明白如何unique_path解决问题。基本上是一样的tmpnam http://en.cppreference.com/w/cpp/io/c/tmpnam:在生成名称之后和创建实际文件之前,另一个程序可能已经创建了同名的文件。

那么它应该如何解决这个需求mkstemp?


我的猜测是,实现(至少在 *nix 系统上)可能会导致有效地调用open with O_EXCL | O_CREAT,它基本上是说“创建文件,如果它已经存在,则返回错误。

因此,实现可以具有如下算法:

for(;;) {
    name = create_likley_unique_name();
    file = open(name, O_EXCL | O_CREAT, mode);
    if(valid(file)) {
        return file;
    }
}

这当然只是一种猜测,但我认为这是合理的。我不知道 windows 或 osx 是否有类似的标志。

我认为您链接的页面上“解决方案”的关键部分是这部分:

建议的修复方法是 (1) 重命名该函数并 (2) 提供 如何通过 fstreams 甚至 C I/O 安全地使用该函数的示例。 建议的措辞见下文。

一个合适的例子就像我刚刚写的那样,但使​​用等效的 C++ API。

请注意,在线程中,他们将函数重命名为generate_random_filename(),考虑到它是不可预测的,这是更合适的,但不能保证是唯一的。但也建议一个create_unique_file(),它可能会实现类似于我的示例的算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

boost::filesystem::unique_path() 如何解决 C++ 中 mkstemp 类似物的需求? 的相关文章

随机推荐

  • 将 H.264 I 帧放入 AVSampleBufferDisplayLayer 但不显示视频图像

    在详细回顾了 WWDC2014 Session513 后 我尝试在 IOS8 0 上编写我的应用程序来解码和显示一个实时 H 264 流 首先 我成功构建了H264参数集 当我得到一个带有 4 位起始代码的帧时 就像 0x00 0x00 0
  • 日期比较无法在 Angular js 中工作

    谁能告诉我为什么我的约会对象没有开始工作 基本上 当我尝试比较日期时 它在 angularJs 中不起作用 var dateObj1 filter date Date now dd MMM yyyy output is 04 May 201
  • 从文本字段上的日期选择器设置当前日期

    我正在文本字段上设置日期选择器 为此 这就是我所写的 在viewDidLoad let datePicker UIDatePicker datePicker datePickerMode UIDatePickerMode date date
  • 有没有办法改变模态视图控制器外观的动画样式?

    我正在尝试为两个视图控制器视图的出现和消失设置动画 我使用了以下两行代码 self modalTransitionStyle UIModalTransitionStyleCoverVertical self presentModalView
  • Jest 不会转换模块 - SyntaxError: 无法在模块外部使用 import 语句

    我无法摆脱这个SyntaxError Cannot use import statement outside a module无论我尝试什么 都会出错 而且非常令人沮丧 这里有人解决了这个问题吗 我已经阅读了一百万个 stackoverfl
  • Paypal SandBox IPN 历史

    我使用贝宝付款 为了验证我使用 我可以在 Paypal 沙盒中查看我的 INP 历史记录吗 At the 文档 https cms paypal com cms content US en US images developer IPNHi
  • 如何在编辑器中将动画曲线更改为线性?

    我向轮子添加了旋转动画 但轮子旋转不顺畅 我发现原因是因为旋转动画的曲线不是线性的 然而 在尝试了编辑器中的几乎所有按钮和选项后 我找不到使动画曲线成为线性的方法 有谁知道如何在统一编辑器中获取带有线性曲线的动画 我自己找到了解决方案 而且
  • MySQL:从另一台服务器选择

    恐怕我已经知道问题的答案 但我还是会问 当有两台 MySQL 数据库服务器时 我可以访问另一台服务器上存储的数据吗 换句话说 我能以某种方式这样做吗 INSERT INTO table x y z SELECT x y x y FROM o
  • Angular - mat-grid-list 不显示 传递的子项

    我正在使用角度材料设计组件 并想要创建一个自定义网格列表组件 该组件将根据其大小调整网格列表列的数量 组件模板如下所示
  • 让请求在curl中工作,但在Python中不起作用

    我正在尝试使用curl 制作一个 put 方法 一切正常 并且我得到了JSON curl X PUT d foo more foo http ip 6001 whatever api key whatever 但是在使用python时由于某
  • C 联合类型双关数组

    鉴于以下代码 我有一些与类型双关相关的问题 我看不出这没有违反严格的别名规则 但我无法指出具体的违规行为 我最好的猜测是 将联合成员传递到函数中违反了严格的别名 以下代码已开启编译器资源管理器 https godbolt org z bnY
  • 如何删除 ASP.Net MVC 中的 Home?

    我知道这个网站是使用 ASP Net MVC 编写的 但我在 url 中没有看到 Home 这向我证明这是可以做到的 我需要什么特殊路线 只需将 Home 更改为空字符串即可 routes MapRoute Home new action
  • Android 中可能存在哪些安全问题[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 为了了解 Android 设备上应如何保护强大的数据 我想了解哪些攻击是可能的 我开始写下我的知识 希望我能得到纠正 哪里错了或者哪里
  • “Uint8Array”类型的参数不可分配给“number[]”类型的参数

    基于crypto subtle exportKey spki cryptoKey https developer mozilla org en US docs Web API SubtleCrypto exportKey我想转换返回的Arr
  • 什么环境变量控制dyld?

    有许多环境变量控制 dyld 启动 其中一些对于调试性能问题非常有用 并非所有这些都被记录下来 这些在 dyld 手册页中有解释 至少在 macOS 10 13 上 DYLD FRAMEWORK PATH DYLD FALLBACK FRA
  • 如何从外部向azure Devops构建管道传递参数来控制任务执行?

    我的查询是 如何将参数传递给外部的azure Dev ops构建管道来控制任务执行 详细解释如下 我在 azure Dev ops 中有一个项目 它有一个构建管道 配置了一系列任务 涉及构建解决方案 生成可部署包等 通常 这会执行得很好 没
  • 在 Clang AST 中查找声明的父级

    我正在使用 clang 进行一些分析 我需要在 AST 中找到声明的父级 例如 在下面的代码中我有int x我想获取它的父级 它应该是函数声明 int main int x return 0 我知道正如这个链接中提到的http commen
  • AWS推送通知服务集成错误

    我正在尝试将亚马逊推送通知集成到我的 iPhone 应用程序中 我确实正确地遵循了此处提供的教程 我在创建平台端点时收到此错误 似乎是身份池的权限问题 CognitoIdentityCredentials is not authorized
  • 组合学:构建 10 组,每组 100 个元素,同时元素保持排序

    我有一个关于组合学的问题 不幸的是 我无法抽象地描述它 所以我尝试用一 个故事来解释它 Problem 校园里有 100 个孩子 它们都有独特的高度 假设值为 100 199 厘米 您想要建立 10 个小组 每个小组由 1 99 名儿童组成
  • boost::filesystem::unique_path() 如何解决 C++ 中 mkstemp 类似物的需求?

    An old 功能要求 https svn boost org trac boost ticket 590对于 Boost 来说 请求的功能类似于mkstemp http pubs opengroup org onlinepubs 0096