我使用C語言和Linux作爲我的編程平臺。設置並獲取配置文件中的值
在我的示例應用程序。我想獲取並設置自定義配置文件的值。下面是我的配置文件的結構。
idlevalue=5
sleeping=1
現在我的問題是我越來越難以考慮如何在我的應用程序中實現設置功能。
我打算獲取文件的所有內容。然後將指針的位置設置爲特定值,然後更改該值。然後再將所有數據寫入文件。
似乎在配置文件中設置值比獲取更難。
請指教。
我使用C語言和Linux作爲我的編程平臺。設置並獲取配置文件中的值
在我的示例應用程序。我想獲取並設置自定義配置文件的值。下面是我的配置文件的結構。
idlevalue=5
sleeping=1
現在我的問題是我越來越難以考慮如何在我的應用程序中實現設置功能。
我打算獲取文件的所有內容。然後將指針的位置設置爲特定值,然後更改該值。然後再將所有數據寫入文件。
似乎在配置文件中設置值比獲取更難。
請指教。
編輯:我刪除了「不把數據庫」實現你的概念處理它的方式......我們的想法是對的配置文件:
編寫代碼之上的API來解析並將所有變量讀入內存中,當保存配置文件時,只需將所有變量再次保存,而不是試圖找到一個特定變量並修改該特定變量的值即可。 :
char *config_file_path = "/foo/bar.conf";
struct config {...} myconfig;
read_config(config_file_path, &myconfig);
// set a value
myconfig.somevalue = 5;
// When re-writing, routine simply over-writes the entire file.
write_config(config_file_path, &myconfig);
只需要在用戶保存配置時寫出文件,所以它不會成爲您的應用程序這樣做的一個巨大瓶頸。
當然 - 最難的部分是您要替換的數據可能與您要替換的數據大小不一樣。
通常的解決方案,特別是對於一個簡單的配置文件,就是簡單地從內存中寫出配置文件的全新副本,包含全部的設置。你用一個臨時名稱創建一個新文件,寫出它的配置,調用fsync()
將其同步到磁盤,然後rename()
通過舊的配置文件。 (這個過程意味着即使您的應用程序或計算機在寫配置文件時崩潰,您也不會以損壞的配置文件結束)。
根據我明顯從文件獲取數據更容易。 對於更改值,有一個更簡單的解決方案,即具有某些結構中的所有數據,並且當您想要更改某些值時,可以在結構中更改它們,然後將整個結構複製迴文件。
如果只有一個變化,並且您不願意將全部數據寫回到文件中,則可以通過在「追加」模式下讀取文件並僅查找您的名稱名稱 - 值對,然後更改該值。實現它需要多一點努力,而不僅僅是將所有數據再次複製到文件中,而是更好地實現您想要的功能。