2010-09-05 16 views
5

Quiero escribir un programa de Unix/Linux, que utilizará un archivo de configuración.Ubicación de la configuración en el programa de Unix

Mi problema es, ¿dónde debo colocar la ubicación del archivo?

Pude "codificar" la ubicación (como /etc) en el programa mismo.

Sin embargo, me gustaría que el usuario sin privilegios pudiera instalarlo (a través de make) en otro lugar, como ~.

¿El archivo MAKE debe editar el código fuente? ¿O se hace generalmente de una manera diferente?

+1

Consulte el Estándar de jerarquía de FileSystem (http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard) para obtener orientación sobre dónde deben ir las cosas, según la convención. – skaffman

Respuesta

1

Es común el uso de una serie de lugares para obtener la ubicación:

  1. Suministrado por el usuario como un argumento de línea de comandos (es decir ./program -C path/to/config/file.cfg).
  2. Desde una variable de entorno (char *path_to_config = getenv("PROGRAMCONFIG");).
  3. Posiblemente, busque una versión local o específica del usuario (stat("./program.cfg") o cree un strig para especificar "$ HOME/.program/config.cfg" o "$ HOME/.program.cfg" y stat).
  4. Hardcoded como copia de seguridad (stat("/etc/program/config.cfg",...)).
6

crear algunos valores por defecto:

  • /etc/appname
  • ~/.appname

Entonces, si desea permitir que éstos sean sobrescritos que su solicitud inspeccionar una variable de entorno. p.ej.

  • $app_userconfig
  • $app_config

que contendría una anulación ruta/nombre de archivo.

Por último, agregue una opción de línea de comandos que permita especificar una configuración en tiempo de ejecución, p. Ej.

  • -c | --config {filename}
0

Como dice skaffman, los lugares canónicas para cosas como archivos de configuración se especifican en el FHS. Parece haber una convención de que un programa leerá un archivo de configuración del directorio desde el cual se ejecuta como una alternativa al de la ubicación codificada. Es posible que desee considerar agregar un modificador de línea de comandos que también permita a un usuario especificar una ubicación alternativa para el archivo de configuración.

1

mantener un archivo de configuración global en/etc/prgname es un estándar. También permitir un archivo de configuración local para usuarios individuales que anulará la configuración global permitiría a cada usuario personalizar el programa según sus preferencias.

0

El archivo MAKE no debe modificar la fuente directamente, pero puede pasar una ruta/nombre de carpeta al compilador a través de la opción -D. Una forma de manejarlo sería #define algo como DEFAULT_PATH para que sea la ruta de instalación predeterminada. Si el usuario quiere definir una ruta, el archivo MAKE agregará -DUSER_PATH=whatever a las opciones del compilador. Debería escribir su código para usar USER_PATH si existe, y DEFAULT_PATH de lo contrario.

Cuestiones relacionadas