2010-09-05 40 views
5

我想寫一個unix/linux程序,它將使用一個配置文件。配置在unix程序中的位置

我的問題是,我應該在哪裏放置文件的位置?

我可以將位置(如/etc)「硬編碼」到程序本身中。

但是,我想,如果沒有權限的用戶可以在其他地方安裝(通過make),如~

makefile文件應該編輯源代碼嗎?還是通常以不同的方式完成?如果你想要讓這些被覆蓋了您的應用程序檢查環境變量

  • /etc/appname
  • ~/.appname

然後:

+1

請參閱文件系統層次結構標準(http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard),根據慣例指導應該去哪裏。 – skaffman 2010-09-05 22:00:03

回答

1

常見的是使用一系列的地方獲得的位置:

  1. 由用戶作爲命令行參數(即./program -C path/to/config/file.cfg)提供。
  2. 來自環境變量(char *path_to_config = getenv("PROGRAMCONFIG");)。
  3. 可能尋找用戶特定或本地版本(stat("./program.cfg")或建立一個strig來指定「$ HOME/.program/config.cfg」或「$ HOME/.program.cfg」和stat那)。
  4. 硬編碼作爲備份(stat("/etc/program/config.cfg",...))。
6

創建一些默認值。例如

  • $app_userconfig
  • $app_config

,其中將包括一個覆蓋路徑/文件名。

最後添加一個命令行選項,允許在運行時指定配置。

  • -c | --config {filename}
0

由於skaffman說,對於像配置文件規範的地點在FHS指定。似乎有一個慣例,程序會從運行它的目錄中讀取一個配置文件,作爲替代硬編碼位置中的配置文件。您不妨考慮添加一個命令行開關,以允許用戶指定替代配置文件的位置。

1

在/ etc/prgname下保留一個全局配置文件是一個標準。同時允許個人用戶使用.local配置文件來覆蓋全局設置,這將允許每個用戶根據自己的喜好個性化該程序。

0

makefile不應直接修改源文件,但可以通過-D選項將文件夾路徑/名稱傳遞給編譯器。處理它的一種方法是#define像DEFAULT_PATH這樣的默認安裝路徑。如果用戶想要定義路徑,那麼makefile會將-DUSER_PATH=whatever添加到編譯器選項。如果它存在,您將編寫代碼以使用USER_PATH,否則使用DEFAULT_PATH。