2012-08-17 42 views
3

我爲我們公司的產品編寫發動機,這些發動機是爲了在我們的客戶服務亭上運行而設計的。這包括將文件寫入磁盤的代碼。微軟在Windows 7上的fopen commit模式標誌是否被破解?

我們無法控制客戶選擇的硬件或操作系統,並且我們第一次獲得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包含的方式,或者是有一些其他的方式,我可以改變狀態全局提交標誌的?

回答

0

除了那些由C文件接口公開的問題外,還有其他很多問題。我正在考慮操作系統和文件系統決策,以延遲寫入和HDD緩存,這可能會解釋您看到的行爲。

除此之外,您應該始終能夠簡單地通過將庫鏈接爲DLL而不是靜態庫來包含commode.obj

+0

據我所知,commit模式標誌應該改變commode.obj所做的全局標誌的文件本地版本,而commode.obj可以工作,而「c」不能。客戶通知我他們已經禁用了驅動器的文件緩存(一個2.5英寸的筆記本電腦),至少儘可能多。儘管使用DLL的好處是,儘管它使得向政府測試版本發佈源代碼變得更加困難。 – subi211 2012-08-17 10:07:40

+0

如何讓DLL釋放源代碼更困難?如果他們因爲沒有正確構建你的庫而遇到麻煩,是不是他們的問題?(我知道,天真...) – rubenvb 2012-08-17 10:10:59

+0

不幸的是它是我們的問題。如果他們不能編譯的東西,他們只會讓我們失敗,另一個投稿會讓我們花費數千美元。他們不是專家,我不得不向他們解釋FPU控制字是如何影響浮點數的。檢查編譯代碼的校驗和與我們發佈的代碼的校驗和。 – subi211 2012-08-17 10:33:18