C++:以非独占模式打开文件

2023-11-25

我必须开发一个应用程序来解析日志文件并将特定数据发送到服务器。它必须在 Linux 和 Windows 上运行。

当我想测试日志滚动系统(它将 .1 附加到名称后会创建一个同名的新系统)时,就会出现问题。在 Windows 上(尚未在 Linux 上测试)我无法重命名使用 std::ifstream() (独占访问?)打开的文件,即使我在“输入模式”(ios::in)下打开它。

是否有跨平台的方式以非独占的方式打开文件?


有没有一种方法以非独占方式打开文件,

是的,使用 Win32,将各种 FILE_SHARE_Xxxx 标志传递给 CreateFile。

是跨平台的吗?

不,它需要特定于平台的代码。

由于烦人的向后兼容性问题(DOS 应用程序是单任务的,假设没有任何东西可以从它们下面删除文件,即它们可以 fclose() 然后 fopen() 不会出现任何问题;Win16 保留了这个假设移植 DOS 应用程序更容易,Win32 保留了这个假设以使移植 Win16 应用程序更容易,这很糟糕),Windows 默认以独占方式打开文件。

底层操作系统基础设施支持删除/重命名打开的文件(尽管我相信它确实有内存映射文件无法删除的限制,我认为这不是 *nix 上的限制),但默认的打开语义不支持。

C++ 没有任何这些概念; C++操作环境与DOS操作环境非常相似——没有其他应用程序同时运行,因此不需要控制文件共享。

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

C++:以非独占模式打开文件 的相关文章

  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • select() 可以在 Windows 下使用 Python 中的文件吗?

    我正在尝试在 Windows 下运行以下 python 服务器 An echo server that uses select to handle multiple clients at a time Entering any line o
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 在Linux中创建可执行文件

    我计划做的一件事是编写 非常简单的 Perl 脚本 并且我希望能够在不从终端显式调用 Perl 的情况下运行它们 我明白 要做到这一点 我需要授予他们执行权限 使用 chmod 执行此操作非常简单 但它似乎也是一个稍微费力的额外步骤 我想要
  • 批处理文件 - 读取特定行,并将该行中的特定字符串保存为变量

    有没有办法让 for f 循环 或其他任何东西 读取特定行 这是我到目前为止的代码 它读取每一行的第一个单词 echo off set file readtest txt for f tokens 1 delims A in file do
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 让 Jenkins 对远程用户不可见

    我的本地 Windows 设备上有一个 Jenkins 服务器 但我想让它对外界不可见 有关服务器的办公室规则 明显且不隐晦的 效果令人满意的方法是设置防火墙规则来阻止对其端口的传入访问 但我认为必须有一个 Jenkins 设置来阻止它向除
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • Flutter Bloc 不会更改 TextFormField 初始值

    我正在使用 Bloc 库 并在产生新状态后注意到我的TextFormField初始值不变 我的应用程序比这更复杂 但我做了一个最小的例子 还跟踪推送事件后状态的变化 Bloc 应该正确地重建整个小部件 我错过了什么吗 import pack
  • 可选类型“Bool”不能用作布尔值;改为测试 '!=nil'

    可选类型 Bool 不能用作布尔值 改为测试 nil 一开始我遇到了一个错误if 通过替换 if 条件 after the 第二个 if 条件从来没有跑过 任何想法 Before if userEmail isEmpty userPassw
  • 如何在 Visual Studio Code 中使用 `pkg-config gtkmm-3.0 --cflags --libs`

    How can I configure the tasks json file so that when I press Ctrl Shift B the copier will use pkg config gtkmm 3 0 cflag
  • 写入共享卷 docker

    我有一个带有 php 应用程序的 docker 例如 我有一个共享量 home me dev site lt gt var www site 我可以在我的主机中写一些东西 它将与容器同步 如果我启动 sudo docker exec tes
  • 在 PHP 站点中避免 xss 攻击的最佳实践是什么 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我配置了 PHP 以便启用魔术引号并关闭寄存器全局变量 我尽最大努力始终为从用户输入派生的任何输出调用 htmlentities 我偶尔也会在我的数据库中搜索附加的 xss 中使
  • 使用 StAX 读取 XML 字符串

    我第一次使用 stax 来解析 XML 字符串 我找到了一些例子 但无法让我的代码工作 这是我的代码的最新版本 public class AddressResponseParser private static final String S
  • 如何在 NodeJS 中只导出一个函数?

    如何仅导出一个函数 其他函数除外 并将其导入到其他文件中 function messsageReceived message print message function readData reads data module exports
  • 如何在Ubuntu上安装Ionic框架?

    我使用的是 Ubuntu 14 04 版本 我想使用 Ionic 构建 Android 应用程序 我找不到安装 Ionic 的确切解决方案 请参阅 Cordova 平台指南here和 Ionic 安装指南here 但我强调的是 Ubuntu
  • HighCharts.js 在 IE8 下不渲染图表

    我将 HighCharts 与 Python 一起使用来动态创建图表 一切正常 但是我得到cannot read property 0 of undefinedIE8下例外 不幸的是我的客户希望它也能在 IE8 下工作 所以这是 main
  • 软键盘不出现

    我正在 android 4 0 4 Samsung Galaxy duo 上测试我的应用程序 问题是如果我设置 android textIsSelectable true 尽管键盘出现在模拟器上 但它没有出现 有什么建议么 这是我的Edit
  • 如何有效地将BitSet转换为二进制字符串?

    我正在寻找一种有效的方法来轻松转换BitSet为二进制字符串 假设它的通常长度为数千位 例如 让我们这样 BitSet bits new BitSet 8 bits set 1 bits set 3 这是期望的结果 String resul
  • .NET 中的线程池和 .IsBackground

    MSDN 以及许多其他来源都声称线程池中的工作线程始终是后台的 线程池线程是后台线程 MSDN 池线程始终是后台线程 C 中的线程 Joseph Albahari 我可以通过设置轻松使工作线程成为非后台 Thread CurrentThre
  • React + Webpack 字符编码问题

    我目前正在使用 ReactJS 和 webpack 来构建一个网站 我的文本编辑器已设置为ISO 8859 15编码 我使用重音或特殊字符 例如 在我的 html 页面中 我相信我使用了正确的配置 但特殊字符没有以正确的方式呈现 Fran
  • SemiFixed:“生产”环境缺少“secret_key_base”

    我从头开始创建了一个 Rails 应用程序 Rails 4 1 0 但遇到了一个无法解决的问题 我已经安装并配置了 Apache Passenger Module 它工作正常 每当我尝试访问虚拟主机时 都会收到错误 500 Missing
  • 无法解析 Android 应用程序模块的 Gradle 配置

    我想使用 firebase 数据库 但是当我单击 连接到 firebase 按钮时 我遇到了这个问题 谁能帮我 Could not parse the Android Application Module s Gradle config R
  • 理解 [ClassOne, ClassTwo].each(&:my_method) [重复]

    这个问题在这里已经有答案了 可能的重复 我在观看 Railscast 时看到了这段代码 Category Product delete all 关于清除数据库 我询问了 IRC 中的线路 并被告知 delete all 是一个捷径 mode
  • Spring Boot:如何向嵌入式tomcat添加另一个WAR文件?

    Spring Boot 的嵌入式 tomcat 对于开发和部署来说都非常方便 但是 如果应添加另一个 第 3 方 WAR 文件 例如 GeoServer 怎么办 也许以下是正常的程序 安装普通的 Tomcat 服务器 将 Spring Bo
  • IntelliJ 中找不到 Maven 插件

    IntelliJ从版本12更新到13后 无法解析以下Maven相关插件 org apache maven plugins maven clean plugin 2 4 1 org apache maven plugins maven dep
  • 如何在 LINQ 中更新单个列而不加载整行?

    在 LinqToSql 中 加载行 更改列并将更改提交到数据库非常简单 using MyDataContext wdc new MyDataContext Article article wdc Article First p gt p I
  • C++:以非独占模式打开文件

    我必须开发一个应用程序来解析日志文件并将特定数据发送到服务器 它必须在 Linux 和 Windows 上运行 当我想测试日志滚动系统 它将 1 附加到名称后会创建一个同名的新系统 时 就会出现问题 在 Windows 上 尚未在 Linu