微软的fopen提交模式标志在Windows 7上是否存在问题?

3
我为我们公司的产品编写引擎,旨在运行在客户的亭子上。这包括将文件写入磁盘的代码。
我们无法控制客户选择的硬件或操作系统,并且第一次我们被赋予了Windows 7嵌入式系统。突然之间,如果在刷新后立即断电,我们的安全写入就会失败。
虽然包含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

除了C文件接口所暴露的问题之外,很可能还存在其他问题。我在考虑操作系统和文件系统决策来延迟写入以及硬盘缓存,这可能可以解释您看到的行为。

除此之外,您应该能够通过将库链接为DLL而不是静态库来始终包含commode.obj


据我所知,提交模式标志应该更改全局标志commode.obj的文件本地版本,而commode.obj可以正常工作,而“c”则不行。客户告诉我,他们已经尽可能地禁用了驱动器(一个2.5英寸的笔记本电脑)的文件缓存。关于使用DLL的好处是很明显的,但这会使向政府测试机构发布源代码变得更加困难。 - subi211
一个DLL如何使发布源代码更加困难?如果他们因为没有正确构建你的库而遇到问题,那不是他们的问题吗?(我知道,这很天真...) - rubenvb
很遗憾,这是我们的问题。如果他们无法编译代码,他们就会直接让我们失败,重新提交将使我们损失数千元。他们并不是那么专业,我曾经不得不向其中一个人解释FPU控制字如何影响浮点转换。他们所做的只是检查编译后的代码校验和与我们发布的代码校验和是否一致。 - subi211

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接