2010-09-05 15 views
5

Desidero scrivere un programma unix/linux, che utilizzerà un file di configurazione.Posizione di configurazione nel programma unix

Il mio problema è, dove dovrei inserire il percorso del file?

Potrei "hardcode" la posizione (come /etc) nel programma stesso.

Tuttavia, mi piacerebbe, se l'utente senza privilegi potesse installarlo (tramite make) da qualche altra parte, come ~.

Il makefile dovrebbe modificare il codice sorgente? O di solito è fatto in un modo diverso?

+1

Vedere lo standard Hierarchy FileSystem (http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard) per indicazioni su dove le cose dovrebbero andare, secondo la convenzione. – skaffman

risposta

1

È comune utilizzare una serie di posti per ottenere la posizione:

  1. inserito dall'utente come una linea di comando argomento (cioè ./program -C path/to/config/file.cfg).
  2. Da una variabile di ambiente (char *path_to_config = getenv("PROGRAMCONFIG");).
  3. È possibile cercare una versione specifica dell'utente o locale (stat("./program.cfg") o creare una stringa per specificare "$ HOME/.program/config.cfg" o "$ HOME/.program.cfg" e stat).
  4. hardcoded come backup (stat("/etc/program/config.cfg",...)).
6

creare alcuni valori di default:

  • /etc/appname
  • ~/.appname

Poi, se si desidera consentire questi per essere sovrascritte avere la vostra applicazione ispezionare una variabile d'ambiente. per esempio.

  • $app_userconfig
  • $app_config

che conterrebbe un override percorso/nomefile.

Infine aggiungere un'opzione della riga di comando che consente di specificare una configurazione in fase di esecuzione, ad es.

  • -c | --config {filename}
0

Come skaffman dice, i luoghi canonici per le cose come i file di configurazione sono specificate in FHS. Sembra esserci una convenzione secondo la quale un programma leggerà un file di configurazione dalla directory da cui viene eseguito come alternativa a quello nella posizione hard-coded. Si consiglia di considerare l'aggiunta di un commutatore della riga di comando che consente a un utente di specificare anche un percorso di file di configurazione alternativo.

1

mantenere un file di configurazione globale in/etc/prgname è uno standard. Inoltre, consentire a un file di configurazione locale per singoli utenti di ignorare le impostazioni globali consentirebbe a ciascun utente di personalizzare il programma in base alle proprie preferenze.

0

Il makefile non dovrebbe modificare direttamente il sorgente, ma può passare un percorso/nome di cartella al compilatore tramite l'opzione -D. Un modo per gestirlo sarebbe #definire qualcosa come DEFAULT_PATH come percorso di installazione predefinito. Se l'utente desidera definire un percorso, il makefile aggiungere -DUSER_PATH=whatever alle opzioni del compilatore. Scriveresti il ​​tuo codice per utilizzare USER_PATH se esiste e DEFAULT_PATH in caso contrario.

Problemi correlati