_fsopen 的 _SH_DENYRW 仅限制跨进程文件访问,同一进程内重复调用仍成功,因其共享模式由 CreateFile 实现且不检查本进程句柄重用;真正进程内互斥需用 std::mutex 或 CreateMutex。为什么 _fsopen 的 _SH_DENYRW 在 Windows 上不阻止同一进程重复打开?因为 _fsopen 的共享模式只作用于「不同进程间」的文件访问控制,同一进程内多次调用 _fsopen(哪怕带 _SH_DENYRW)不会报错------它根本不管你自己。这是 Win32 文件句柄层面的设计逻辑,C 运行时只是封装了 CreateFile,而后者默认允许同进程复用句柄。常见错误现象:_fsopen("data.bin", "rb", _SH_DENYRW) 成功返回后,紧接着再调一次,依然成功;你以为"独占"了,其实只是挡住了其他进程。真正想实现进程内互斥,得自己加 static std::mutex 或全局 HANDLE + CreateMutex_SH_DENYRW 实际等价于 CreateFile(..., FILE_SHARE_NONE, ...),仅影响跨进程共享标志如果用 fopen 替代 _fsopen,连跨进程保护都没有------它根本不传共享标志_fsopen 和标准 fopen 在文件锁行为上到底差在哪?差在是否向系统传递共享标志参数。fopen 完全忽略共享控制,所有打开都等效于 _SH_DENYNO;_fsopen 才把 SH* 值转成 CreateFile 的 dwShareMode 参数。使用场景:只有当你明确需要阻止其他进程(比如另一个 exe 或服务)同时读写该文件时,才必须用 _fsopen + _SH_DENYRW。日常单进程读写、日志追加、配置加载,用 fopen 更轻量且可移植。立即学习"C++免费学习笔记(深入)"; 唱鸭 音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体
相关推荐
笃行35015 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具非优秀程序员17 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》用户956256254291 天前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结SelectDB1 天前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系威哥爱编程1 天前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来这个DBA有点耶1 天前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返威哥爱编程1 天前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官2601_967980111 天前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒伞伞悦读1 天前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验新*1 天前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化