我想寫一個unix/linux程序,它將使用一個配置文件。配置在unix程序中的位置
我的問題是,我應該在哪裏放置文件的位置?
我可以將位置(如/etc
)「硬編碼」到程序本身中。
但是,我想,如果沒有權限的用戶可以在其他地方安裝(通過make),如~
。
makefile文件應該編輯源代碼嗎?還是通常以不同的方式完成?如果你想要讓這些被覆蓋了您的應用程序檢查環境變量
/etc/appname
~/.appname
然後:
我想寫一個unix/linux程序,它將使用一個配置文件。配置在unix程序中的位置
我的問題是,我應該在哪裏放置文件的位置?
我可以將位置(如/etc
)「硬編碼」到程序本身中。
但是,我想,如果沒有權限的用戶可以在其他地方安裝(通過make),如~
。
makefile文件應該編輯源代碼嗎?還是通常以不同的方式完成?如果你想要讓這些被覆蓋了您的應用程序檢查環境變量
/etc/appname
~/.appname
然後:
常見的是使用一系列的地方獲得的位置:
./program -C path/to/config/file.cfg
)提供。char *path_to_config = getenv("PROGRAMCONFIG");
)。stat("./program.cfg")
或建立一個strig來指定「$ HOME/.program/config.cfg」或「$ HOME/.program.cfg」和stat
那)。stat("/etc/program/config.cfg",...)
)。創建一些默認值。例如
$app_userconfig
$app_config
,其中將包括一個覆蓋路徑/文件名。
最後添加一個命令行選項,允許在運行時指定配置。
-c | --config {filename}
由於skaffman說,對於像配置文件規範的地點在FHS指定。似乎有一個慣例,程序會從運行它的目錄中讀取一個配置文件,作爲替代硬編碼位置中的配置文件。您不妨考慮添加一個命令行開關,以允許用戶指定替代配置文件的位置。
在/ etc/prgname下保留一個全局配置文件是一個標準。同時允許個人用戶使用.local配置文件來覆蓋全局設置,這將允許每個用戶根據自己的喜好個性化該程序。
makefile不應直接修改源文件,但可以通過-D
選項將文件夾路徑/名稱傳遞給編譯器。處理它的一種方法是#define像DEFAULT_PATH這樣的默認安裝路徑。如果用戶想要定義路徑,那麼makefile會將-DUSER_PATH=whatever
添加到編譯器選項。如果它存在,您將編寫代碼以使用USER_PATH,否則使用DEFAULT_PATH。
請參閱文件系統層次結構標準(http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard),根據慣例指導應該去哪裏。 – skaffman 2010-09-05 22:00:03