Несколько ответов на этот вопрос объясняют, как анализировать этот конфигурационный файл, но вы можете использовать стандартные синтаксические разборы (возможно, ваш собственный анализатор рекурсивного спуска ) или лексическое сканирование Glib или анализатор пар ключ-значение (или использовать что-то еще). Вы, безусловно, должны определить и документ (возможно, используя EBNF ), что такое формат этого текстового файла конфигурации (и что представляют различные записи там: например, если этот файл конфигурации ссылается на другие файлы, как вы обрабатываете пробелы в таких путях к файлам и т. д ....). Общепринятое (но не универсальное) соглашение состоит в том, чтобы рассматривать в качестве комментариев, поэтому пропускайте любую строку, начинающуюся с #
.
Другой вопрос, как получить этот файл конфигурации при работе в произвольном рабочем каталоге . Вам просто нужно построить абсолютный путь к вашему файлу (для fopen (3) или open (2) ), например, с
char configpath[100];
snprintf(configpath, sizeof(configpath), "%s/.test.config", getenv("HOME"));
До этого можно было проверить getenv("HOME")
- это не NULL
, но на практике это очень маловероятно; см. environment (7) и getenv (3) ; и случай, когда он дает очень длинный путь к файлу, также маловероятен; Вы можете проверить, что snprintf (3) возвращает число меньше sizeof(configpath)
или использовать asprintf (3) .
Вы можете использовать другие функции, например, glob (3) или wordexp (3) , чтобы получить путь к этому файлу (но вам, вероятно, следует придерживаться snprintf
или asprintf
с getenv("HOME")
...).
Вы можете вместо этого включить в вашу программу какой-нибудь интерпретатор с поддержкой сценариев, например lua или guile (но это сильное архитектурное решение). Затем файл конфигурации становится неким (завершенным по Тьюрингу!) Сценарием.
Кстати, нет необходимости использовать sudo
для редактирования этого файла конфигурации (в вашем домашнем каталоге), и вы можете также прочитать некоторые общесистемные настройки в /etc/