5 Stimmen

Ort der Konfiguration im Unix-Programm

Ich möchte ein Unix/Linux-Programm schreiben, das eine Konfigurationsdatei verwendet.

Mein Problem ist, wo soll ich den Speicherort der Datei angeben?

Ich könnte den Ort "hardcodieren" (wie /etc ) in das Programm selbst.

Ich fände es aber gut, wenn der Benutzer ohne Privilegien es (über make) irgendwo anders installieren könnte, z.B. ~ .

Sollte das Makefile den Quellcode bearbeiten? Oder wird das üblicherweise auf andere Weise gemacht?

6voto

ocodo Punkte 28409

Erstellen Sie einige Standardwerte:

  • /etc/appname
  • ~/.appname

Wenn Sie dann zulassen wollen, dass diese überschrieben werden, lassen Sie Ihre Anwendung eine Umgebungsvariable überprüfen, z. B.

  • $app_userconfig
  • $app_config

die einen Überschreibungspfad/Dateinamen enthalten würde.

Fügen Sie schließlich eine Befehlszeilenoption hinzu, mit der eine Konfiguration zur Laufzeit angegeben werden kann, z. B.

  • -c | --config {filename}

1voto

cmptrwhz Punkte 190

Das Führen einer globalen Konfigurationsdatei unter /etc/prgname ist Standard. Die Möglichkeit, eine lokale Konfigurationsdatei für einzelne Benutzer zu erstellen, die die globalen Einstellungen überschreibt, würde es jedem Benutzer ermöglichen, das Programm nach seinen Wünschen zu personalisieren.

1voto

Es ist üblich, eine Reihe von Orten zu verwenden, um den Standort zu ermitteln:

  1. Wird vom Benutzer als Befehlszeilenargument angegeben (d. h. ./program -C path/to/config/file.cfg ).
  2. Aus einer Umgebungsvariablen ( char *path_to_config = getenv("PROGRAMCONFIG"); ).
  3. Möglicherweise suchen Sie nach einer benutzerspezifischen oder lokalen Version ( stat("./program.cfg") oder erstellen Sie eine Zeichenkette, um entweder "$HOME/.program/config.cfg" oder "$HOME/.program.cfg" anzugeben und stat das).
  4. Hardcodiert als Backup ( stat("/etc/program/config.cfg",...) ).

0voto

Darael Punkte 331

Wie skaffman sagt, sind die kanonischen Speicherorte für Dinge wie Konfigurationsdateien in FHS angegeben. Es scheint eine Konvention zu geben, die besagt, dass ein Programm eine Konfigurationsdatei aus dem Verzeichnis liest, aus dem es gestartet wird, als Alternative zu derjenigen, die sich am fest programmierten Ort befindet. Vielleicht möchten Sie einen Befehlszeilenschalter hinzufügen, der es dem Benutzer ermöglicht, auch einen alternativen Speicherort für die Konfigurationsdatei anzugeben.

0voto

bta Punkte 41611

Das Makefile sollte den Quelltext nicht direkt verändern, aber es kann einen Ordnerpfad/-namen an den Compiler über die -D Option. Eine Möglichkeit, damit umzugehen, wäre, etwas wie DEFAULT_PATH als Standard-Installationspfad zu definieren. Wenn der Benutzer einen Pfad definieren möchte, würde das Makefile Folgendes hinzufügen -DUSER_PATH=whatever zu den Compiler-Optionen. Sie würden Ihren Code so schreiben, dass er USER_PATH verwendet, wenn er existiert, und ansonsten DEFAULT_PATH.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X