Windows 7上的Microsoft的fopen提交模式标志是否已损坏?

时间:2012-08-17 09:36:58

标签: c windows-7 file-io commit fopen

我为我们公司的产品编写引擎,这些产品旨在运行在我们的客户服务亭上。这包括将文件写入磁盘的代码。

我们无法控制客户端的硬件或操作系统选择,这是我们第一次使用Windows 7 Embedded。突然之间,如果在冲洗后立即断电,我们的安全写入已经开始失败。

尽管包含commode.obj导致fflush提交,即使在Win7上,我也总是喜欢在Windows上使用特定于MS的提交模式标志(“c”)(Linux版本使用完全不同的方法),因为当我编写库而不是产品时,我永远不能确定commode.obj实际上已被包含在内,所以我不能抛出错误。

FILE* p_f = fopen("foo.dat", "wbc");
fwrite(p_important_stuff, 1, size, p_f);
fflush(p_f);

所以我的问题是:Win7上的提交模式标志是否已损坏,如果是这样,我可以保证包含commode.obj,或者是否有其他方式我可以更改全局提交标志的状态?

2 个答案:

答案 0 :(得分:0)

除了C文件接口公开的问题之外,很可能还有其他问题。我正在考虑操作系统和文件系统决策来延迟写入和HDD缓存,这可以解释你看到的行为。

除此之外,您应该只需将您的库链接为DLL而不是静态库,就可以始终包含commode.obj

答案 1 :(得分:0)

在添加commode.obj时,我们也遇到了问题。

我们使用lwr而不使用fflush(...),而没有参数。

有关他的知识库文章https://jeffpar.github.io/kbarchive/kb/066/Q66052/

中的更多信息