【发布时间】:2015-03-02 09:55:17
【问题描述】:
我正在开发一种将数据写入文件的工具。
在某些时候,文件可能被“锁定”并且在其他句柄关闭之前不可写。
我可以循环使用CreateFile API,直到文件可用于写入访问。
但我在循环中使用CreateFile 有两个问题:
- 硬盘(缓存)一直在运行...?!
- 我需要再次调用
CreateFile以获得具有不同标志的有效写入句柄...?!
所以我的问题是:
等待文件可写并立即获得有效句柄的最佳解决方案是什么?
是否有任何事件解决方案或任何东西,允许“排队/保留”一次句柄,以便与其他人没有“不受控制”的竞争条件?
【问题讨论】:
-
硬盘驱动器没有“始终运行”的问题,这是它们的设计目的......
-
@JonathanPotter 我不同意。如果硬盘保持在同一扇区,则会出现延迟和性能滞后。它也磨损了。如果这些事情是在记忆中处理的,那就另当别论了。
-
我的评论有点滑稽,我会同意你的。但你不必担心。文件系统缓存在内存中。反复尝试打开文件句柄几乎肯定不会触及磁盘。
-
@JonathanPotter 实际上,我会在您最初的评论中指出,这方面的主要问题是,如果服务器在没有断电的情况下连续运行 X+ 年,硬盘是否真的会启动.
-
@JonathanPotter 我几乎接受了这个作为答案。 a/“种族”条件呢?假设有 10 个循环时间不同的进程正在尝试打开文件。 “先到先得”在这里适用吗?很难解释,这就是为什么我在这个问题中加入了“队列/保留”这个词。
标签: winapi