C 是微软公司';Windows 7上的s fopen提交模式标志已断开?

C 是微软公司';Windows 7上的s fopen提交模式标志已断开?,c,windows-7,file-io,commit,fopen,C,Windows 7,File Io,Commit,Fopen,我为我们公司的产品编写引擎,这些产品是为在我们客户的信息亭上运行而设计的。这包括将文件写入磁盘的代码 我们无法控制客户端对硬件或操作系统的选择,这是我们第一次被赋予Windows7嵌入式操作系统。突然,如果刷新后立即断电,我们的安全写入开始失败 尽管包含commode.obj会导致fflush提交,即使在Win7上,我也始终更喜欢在Windows上使用MS特定的提交模式标志(“c”)(Linux版本使用完全不同的方法),因为在我编写库而不是产品时,我永远无法确定是否确实包含了commode.ob

我为我们公司的产品编写引擎,这些产品是为在我们客户的信息亭上运行而设计的。这包括将文件写入磁盘的代码

我们无法控制客户端对硬件或操作系统的选择,这是我们第一次被赋予Windows7嵌入式操作系统。突然,如果刷新后立即断电,我们的安全写入开始失败

尽管包含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,或者是否有其他方法可以更改全局提交标志的状态?

除了C文件接口暴露的问题外,很可能还有其他问题。我正在考虑操作系统和文件系统延迟写入的决定,以及HDD缓存,这也许可以解释您看到的行为


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

我们还遇到了包含Comode.obj的问题,因为它不适用于我们

我们没有使用
fflush(…)
,而是使用了
\u flushall()
,没有参数


更多信息请参阅他存档的知识库文章

据我所知,commit mode标志应该会更改commode.obj执行的全局标志的文件本地版本,而commode.obj可以工作,而“c”则不能。客户端通知我他们已禁用驱动器的文件缓存(2.5英寸笔记本电脑),至少尽可能多。尽管DLL会使向政府测试机构发布源代码变得更加困难,但使用DLL还是有好处的。DLL如何使发布源代码变得更加困难?如果他们因为没有正确构建库而遇到麻烦,这不是他们的问题吗?(我知道,很幼稚…)不幸的是,这是我们的问题。如果他们不能编译东西,他们只会让我们彻底失败,而另一次提交需要花费我们数千美元。而且他们不是专家,我不得不向其中一个解释FPU控制字是如何影响浮点强制转换的。他们所做的就是对照我们发布的代码检查编译代码的校验和。