程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 多進程訪問r/w配置文件(.ini格式)時,總是發生文件被破壞的情況問題的解決

多進程訪問r/w配置文件(.ini格式)時,總是發生文件被破壞的情況問題的解決

編輯:關於C語言

  如何解決這個問題呢?決定用文件鎖。 有BSD方式和POSIX格式的文件鎖,如下: #if (CFG_FLOCK_BSD==1) ret=flock(fd,LOCK_SH); if (ret!=0) //can not get R_lock when writting { ret=-100; goto End; } #elif (CFG_FLOCK_POSIX==1) ret=_SimpleSetPosixLock(fd,F_RDLCK); if (ret<0) //can not get R_lock when writting { ret=-100; goto End; } #endif 加了文件鎖後,仍然發生這種情況。一度懷疑是文件鎖本身有問題。 最後發現,其實是stat 出來的file size不正確導致的。 用ret=fstat(fd,&sb);取代//stat (pconfig->fileName, &sb); 就沒有問題了。 根據文件名來stat file size,就有可能發生文件正在被另一個進程write時,這時根據不正確的size將文件讀進內存,在commit時寫回文件,於是就出錯了。 正確的操作流程是: 打開文件-->申請讀鎖-->成功則fstat size,並根據size讀文件入內存中。 這樣就不會發生文件被損壞的情況了。 當然,ini文件操作本身提供的API也有缺陷,在ret返回失敗時,沒有去置出口參數。 返回值失敗時,也將出口參數置為非法值。 #define NULL_STR '\0' #define NULL_VAL 0xFFFF Ini配置文件是純ANSI C編寫的,容易移植。支持多進程訪問,效率較高。有需要的兄弟,可以留言,發短信或郵件給我。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved