Конфигурация, создание и использование файла в C unix - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь понять, как я могу создать файл ".config", содержащий набор параметров для последующего использования для настройки переменных в моем проекте C в Unix.

Я создал свой файл ".config", используя sudo nano test.config, и написал некоторые вещи внутри, такие как:

#N is this
N 10
#p is that
p 0.002
#T is this
T 10

Теперь, когда я сделал это, как я могу прочитать его содержимое и использовать его для инициализации моих переменных?

1 Ответ

0 голосов
/ 16 мая 2018

Несколько ответов на этот вопрос объясняют, как анализировать этот конфигурационный файл, но вы можете использовать стандартные синтаксические разборы (возможно, ваш собственный анализатор рекурсивного спуска ) или лексическое сканирование 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...