что такое конфиг файл

Конфигурационные файлы. Библиотека libconfig

Введение

Как-то находясь в поиске как мне прикрутить конфигурационные ini файлы или json к моему сервачку перебирал варианты, но почему-то они были неудобны или слишком простые, или велосипеды. И хоть я люблю xml конфигурирование, но порою это чрезмерно огромные файлы и неудобно для небольшого количества настроек писать много текста. Раз задал другу вопрос по этой теме, он то мне и подкинул библиотеку. Напоминает она json в смеси с yaml.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Библиотека имеет два интерфейса: функциональный и объектный. Они очень похожи, так как объектный использует внутри функциональную реализацию, но имеют некоторые различия, рассмотренные в данном посте.

Настройка и подключение

Библиотека есть во многих репозиториях, поэтому установка простая:

В исходниках С++ подключается одним лишь инклудом:

Конфигурационный файл

Файл конфига представляет собой следующего вида структуру:

Основными видами записей в конфиге являются такие типы:

Элемент (Setting)

Это минимальная значимая часть конфигурационной структуры и имеют вид ключ-значение:

Группы (Groups)

Группы могут содержать любое число элементов, но каждый элемент должен содержать уникальный ключ в пределах группы. Записывается в фигурных скобках:

Массивы (Arrays)

Содержат любое количество элементов, даже ноль, но все элементы состоят лишь из значений и должны иметь один и тот же скалярный тип в пределах массива. Записывает в квадратных скобках:

Списки (Lists)

Списки содержат ноль или более элементов скалярного типа, массивов, групп или списков. Записывается в круглых скобках:

Целочисленые значения (Integers)
Дробные числа с плавающей запятой (floats)

Записывается тоже привычным нам способом

Запись с экспонентой стандартная с ‘e’.

Булевые значения (Boolean)
Строки (Strings)
Комментарии
Внешние подключения (Includes)

Это, в общем, самая вкусная вкусняшка.

С API

В данной части я не стану расписывать все функции, только лишь основные, так как они в целом похожие, и основные нюансы.

Описание использованых функций ниже

Небольшое описание функционала

config_t — тип файла конфигурации (это ещё не запись). Грубо говоря, основной контейнер.
config_setting_t — объект элемента конфигурации. В примере используется указатель, возвращаемый контейнером на искомый элемент.
int config_read_file(config_t * config, const char * filename) — функция читает конфигурационный файл filename в память и заполняет объект типа config_t. Можно не читать из файла, а сразу «скормить» строку в config_read_string() или отдать дескриптор файла в config_read()
int config_lookup_string (const config_t * config, const char * path, const char ** value) — ищет и возвращает значение в виде указателя на строку value, по заданному пути path внутри конфига config.
config_setting_t * config_lookup (const config_t * config, const char * path) — ищет запись внутри конфига по заданному внутреннему пути и возвращает её.
config_setting_t * config_setting_get_elem (const config_setting_t * setting, unsigned int index) — используется для массивов, списков чтобы возвращать из него элементы с таким-то номером по порядку
int config_setting_lookup_string (const config_setting_t * setting, const char * name, const char ** value) —
возвращает значение value дочернего элемента name относительно заданной записи setting
Когда же надо получить значение в конкретно заданной записи, то используются функции типа
int config_setting_get_int (const config_setting_t * setting)

C++ API

Тот же пример, но на С++. Полная документация на сайте

Тут тот же принцип, что и в функциональном стиле, только перед получением данных из конфига необходимо получать корневой элемент cfg.getRoot(); и уже потом от него обращаться к остальным элементам. Так же надо быть внимательным к тому, что практически на все ошибки кидаются исключения

Заключение

Кроме считывания удобных конфигов, в API предоставлен так же функционал создания элементов конфига и его записи на носитель.

Всё в документации [en] на сайте библиотеки.

Примеры идут вместе с исходниками. Их можно скачать следующей командой в консоли:

или же из исходников по прямой ссылке.

Документация представлена в форматах HTML и PDF.
Лицензия GNU LGPL.

Источник

Конфигурационные файлы в Python

В этой статье, я хочу попробовать найти идеальный (вероятнее всего) способ хранения и использования конфигурационных файлов в Python. Ну, а также поделиться своей библиотекой для них 🙂

Попытка №1

А что насчёт того чтобы хранить конфигурацию в коде? Ну, а что, вроде удобно, да и новых языков не придётся изучать. Существует множество проектов, в которых данный способ используется, и хочу сказать, вполне успешно.

Типичный конфиг в этом стиле выглядит так:

Да и вообще, почему хоть какие-то данные хранятся в коде? Как мне кажется код, он на то и код, что должен выполнять какую-то логику, а не хранить данные.

Данный подход, на самом деле используется много где. В том же Django. Все думают, что раз это самый популярный фреймворк, который используется в самом Инстаграме, то они то уж плохое советовать не будут. Жаль, что это не так.

Попытка №2

Наш конфиг, который мы уже писали ранее:

А теперь прочитаем в Python:

Попытка №3

А сейчас, я хотел бы показать Вам свою библиотеку, которая призвана решить все эти проблемы (ну, или хотя бы уменьшить ваши страдания :)).

Называется она betterconf и доступна на PyPi.

Установка так же проста, как и любой другой библиотеки:

Изначально, наш конфиг представлен в виде класса с полями:

По умолчанию, библиотека пытается взять значения из переменных окружения, но мы также можем настроить и это:

Из этого примера следует, что мы можем применять различные провайдеры для получения данных. И это действительно иногда бывает удобно, говорю из личного опыта.

Хорошо, а что если у нас в конфигах есть булевые значения, или числа, они же в итоге будут все равно приходить в строках. И для этого есть решение:

Свой кастер написать также легко:

Итоги

Таким образом, мы пришли к выводу, что хранить настройки в исходных кодах — не есть хорошо. Для этого уже придуманы различные форматы. Ну, а вы познакомились с ещё одной полезной (как я считаю :)) библиотекой.

Источник

Что такое файлы конфигурации и как их редактировать?

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Подавляющее большинство используемых нами компьютерных программ — будь то офисные пакеты, веб-браузеры или даже видеоигры — настраиваются через систему интерфейсов меню. Это стало практически стандартным способом использования наших машин. Но некоторые программы требуют, чтобы вы сделали шаг за этим, и вам действительно нужно отредактировать текстовый файл, чтобы заставить их работать так, как вы хотите.

Эти текстовые файлы, что неудивительно, называются «конфигурационными файлами». Если вы хотите перейти от «пользователя» к «продвинутому пользователю», вам нужно знать, как их настроить.

Что такое файлы конфигурации?

Прежде чем мы углубимся в технические подробности, давайте сначала конкретно определим, что такое файл конфигурации.

Файлы конфигурации — это, по сути, файлы, которые содержат информацию, необходимую для успешной работы программы, которые структурированы особым образом. Вместо того, чтобы быть жестко запрограммированными в программе, они настраиваются пользователем и, как правило, хранятся в текстовом файле (хотя ранее я видел программы, которые использовали базы данных SQLite. как их конфигурационные файлы).

Удивительно, но не существует определенного стандарта о том, как должны работать файлы конфигурации или как они должны выглядеть. Это полностью зависит от прихоти разработчика программы.

Некоторые конфигурационные файлы структурированы в формате собственного дизайна разработчика. Другие используют широко известные стандарты, используемые для структурирования данных, такие как формат JSON (нотация объектов JavaScript), YAML (язык разметки YAML) или XML (расширяемый язык разметки). Некоторые программы загружают информацию, хранящуюся в их конфигурационных файлах, когда они запускаются, в то время как другие периодически проверяют, была ли она изменена.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Хотя это не исключительно Linux вещь. В зависимости от того, что вы делаете, вам, возможно, придется редактировать их в Windows или Mac OS X.

Как выглядят файлы конфигурации?

Теперь давайте взглянем на некоторые реальные конфигурационные файлы. Как мы упоминали ранее, они бывают разных форм и размеров. Один файл конфигурации, с которым вы почти наверняка знакомы, — это файл hosts, который используется в Windows, Mac и Linux для сопоставления IP-адресов с именами узлов вручную.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Как вы заметите, файл hosts использует пробелы для разделения элементов, причем каждое имя хоста имеет свою собственную строку. Кроме того, файл hosts позволяет пользователю добавлять аннотации и комментарии, которые начинаются с символа хеша.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Как редактировать файлы конфигурации

Итак, теперь мы знаем, для чего используются файлы конфигурации, давайте поговорим о том, как мы можем их редактировать.

Для этого вам понадобится текстовый редактор. Не используйте текстовый процессор, так как они могут добавить форматирование в файл, что помешает их чтению программой.

Пользователи Windows уже имеют предустановленный текстовый редактор. Я говорю о блокноте. Хотя стоит подчеркнуть, что для Windows существует множество отличных текстовых редакторов сторонних производителей, включая Notepad ++, Atom и Sublime Text Editor.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

В Mac OS X (или MacOS Sierra, скоро станет известно, ), есть несколько текстовых редакторов, которые поставляются предварительно установленными. Вы, вероятно, знакомы с TextMate. Он также включает несколько текстовых редакторов командной строки, таких как Vim и Nano.

Когда вы редактируете файл, важно убедиться, что вы соблюдаете его соглашения. Это можно решить, просто взглянув на это. Некоторые конфигурационные файлы, такие как файл hosts, объяснят вам эти соглашения. Другие заставят вас прочитать некоторую документацию или пару постов в блоге.

Наконец, если редактируемый файл конфигурации структурирован в формате JSON или XML, вы можете использовать более мощный текстовый редактор с подсветкой синтаксиса. Я рекомендую Атом. Это повысит вашу точность, показывая, когда вы допустили ошибку.

Что, если это не работает?

Наконец, давайте коснемся того, что происходит, когда что-то идет не так. По моему опыту, проблемы, связанные с редактированием конфигурационных файлов, имеют тенденцию делиться на два лагеря.

Первый — это разрешения. Если вы не можете сохранить свои изменения, это может быть потому, что вы пытаетесь сделать это как обычный пользователь. Чтобы предотвратить случайное повреждение, многие конфигурационные файлы доступны для редактирования только тем, у кого есть права администратора.

Исправить это легко. В Mac и Linux попробуйте повысить свои права с помощью команды sudo. Итак, если вы редактировали файл hosts, вы бы запустили:

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Вторая распространенная проблема — ошибка пользователя. Если что-то не работает, это может быть ваша вина. Убедитесь, что вы не сделали никаких опечаток, и что вы следовали соглашениям файла конфигурации. Я знаю, это кажется очевидным, но простая орфографическая ошибка или забывание закрыть пару речевых меток может сделать весь файл бесполезным.

Хороший способ избежать проблем — сделать копию файла конфигурации, прежде чем вносить какие-либо изменения. Таким образом, если что-то пойдет не так, вы можете восстановить копию и начать заново!

Файлы конфигурации важны

Более того, они являются неотъемлемой частью использования Linux. Знание того, как правильно их редактировать, поможет вам бесконечно.

Есть ли какие-то другие важные навыки, которые, по вашему мнению, должны знать пользователи Linux от начального до среднего уровня? Позвольте мне знать в комментариях ниже.

Источник

Что такое файлы конфигурации и как вы можете их редактировать?

Подавляющее большинство используемых нами компьютерных программ — будь то офисные пакеты, веб-браузеры или даже видеоигры — настраиваются через систему интерфейсов меню. Это стало практически стандартным способом использования наших машин. Но некоторые программы требуют, чтобы вы сделали шаг за этим, и вам действительно нужно отредактировать текстовый файл, чтобы заставить их работать так, как вы хотите.

Эти текстовые файлы, что неудивительно, называются «конфигурационными файлами». Если вы хотите перейти от «пользователя» к «продвинутому пользователю», вам нужно знать, как их настроить.

Что такое файлы конфигурации?

Прежде чем мы углубимся в технические подробности, давайте сначала конкретно определим, что такое файл конфигурации.

Файлы конфигурации — это, по сути, файлы, которые содержат информацию, необходимую для успешной работы программы, которые структурированы особым образом. Вместо того, чтобы быть жестко запрограммированным в программе, они настраиваются пользователем и обычно хранятся в текстовом файле (хотя ранее я видел программы, которые использовали базы данных SQLite

как их файлы конфигурации).

Удивительно, но не существует определенного стандарта о том, как должны работать файлы конфигурации или как они должны выглядеть. Это полностью зависит от прихоти разработчика программы.

Некоторые конфигурационные файлы структурированы в формате собственного дизайна разработчика. Другие используют широко известные стандарты, используемые для структурирования данных, такие как формат JSON (нотация объектов JavaScript), YAML (язык разметки YAML) или XML (расширяемый язык разметки). Некоторые программы загружают информацию, хранящуюся в их конфигурационных файлах, когда они запускаются, в то время как другие периодически проверяют, была ли она изменена.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Если вы пользователь Linux, вы, вероятно, будете знакомы с ними, так как многие основные задачи обслуживания требуют редактирования файлов конфигурации. Если вы хотите настроить GRUB для двойной загрузки вашей системы

или настроить веб-сервер

вам придется иметь с ними дело.

Хотя это не исключительно Linux. В зависимости от того, что вы делаете, вам, возможно, придется редактировать их в Windows или Mac OS X.

Как выглядят файлы конфигурации?

Теперь давайте взглянем на некоторые реальные конфигурационные файлы. Как мы упоминали ранее, они бывают разных форм и размеров. Один файл конфигурации, с которым вы почти наверняка знакомы, — это файл hosts, который используется в Windows, Mac и Linux для сопоставления IP-адресов с именами узлов вручную.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

В Windows вы можете найти его под C: \ WINDOWS \ system32 \ Drivers \ Etc \ хостов. На Mac и Linux это будет в / и т.д. / хосты.

Как вы заметили, файл hosts использует пробелы для разделения элементов, причем каждое имя хоста имеет свою собственную строку. Кроме того, файл hosts позволяет пользователю добавлять аннотации и комментарии, которые начинаются с символа хеша.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Одна программа, которая следует этому конкретному соглашению, является текстовым редактором Vim

, В прошлом мы говорили о том, как настроить VIM, отредактировав его конфигурационный файл.

Файлы конфигурации даже используются в видеоиграх для определения и управления некоторыми действиями, такими как сопоставления клавиш. Приведенный ниже файл конфигурации взят из Black Mesa — фанатского ремейка оригинального Half Life.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

В оригинальной версии Deus Ex, выпущенной в 2000 году, пользователю фактически пришлось отредактировать файл конфигурации, чтобы включить читы!

Как редактировать файлы конфигурации

Итак, теперь мы знаем, для чего используются конфигурационные файлы, давайте поговорим о том, как мы можем их редактировать.

Для этого вам понадобится текстовый редактор. Не используйте текстовый процессор, так как они могут добавить форматирование в файл, что помешает их чтению программой.

Пользователи Windows уже имеют предустановленный текстовый редактор. Я говорю о блокноте. Хотя стоит подчеркнуть, что для Windows доступно множество отличных сторонних текстовых редакторов, включая Notepad ++, Atom и Sublime Text Editor.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

В Linux ближайшим аналогом Notepad является Gedit

, Вы также можете рассмотреть возможность использования текстового редактора командной строки, такого как Nano или Vim

, Ради большей эффективности я сильно склоняюсь к текстовому редактору Vim. Это позволяет мне легко переходить на разные позиции в файле конфигурации, просто используя несколько нажатий клавиш.

На Mac OS X (или MacOS Sierra, скоро это станет известно

), есть несколько текстовых редакторов, которые поставляются предварительно установленными. Вы, вероятно, знакомы с TextMate. Он также включает ряд текстовых редакторов командной строки, таких как Vim и Nano.

Когда вы редактируете файл, важно убедиться, что вы соблюдаете его соглашения. Это можно решить, просто взглянув на это. Некоторые конфигурационные файлы, такие как файл hosts, объяснят вам эти соглашения. Другие заставят вас прочитать некоторую документацию или пару постов в блоге.

Наконец, если редактируемый файл конфигурации структурирован в формате JSON или XML, вы можете использовать более мощный текстовый редактор с подсветкой синтаксиса. Я рекомендую Атом. Это повысит вашу точность, показывая, когда вы допустили ошибку.

Что делать, если это не работает?

Наконец, давайте коснемся того, что происходит, когда что-то идет не так. По моему опыту, проблемы, связанные с редактированием конфигурационных файлов, имеют тенденцию делиться на два лагеря.

Первый — это разрешения. Если вы не можете сохранить свои изменения, это может быть потому, что вы пытаетесь сделать это как обычный пользователь. Во избежание случайного повреждения многие файлы конфигурации доступны для редактирования только тем, у кого есть права администратора.

Исправить это легко. В Mac и Linux попробуйте повысить свои права с помощью команды sudo. Итак, если вы редактировали файл hosts, вы запустили бы:

В Windows щелкните правой кнопкой мыши Блокнот (или любой текстовый редактор, который вы используете) и выберите Запустить от имени администратора.

что такое конфиг файл. Смотреть фото что такое конфиг файл. Смотреть картинку что такое конфиг файл. Картинка про что такое конфиг файл. Фото что такое конфиг файл

Вторая распространенная проблема — ошибка пользователя. Если что-то не работает, это может быть ваша вина. Убедитесь, что вы не сделали никаких опечаток, и что вы следовали соглашениям файла конфигурации. Я знаю, это кажется очевидным, но простая орфографическая ошибка или забвение закрыть пару речевых меток может сделать весь файл бесполезным.

Хороший способ избежать проблем — сделать копию файла конфигурации, прежде чем вносить какие-либо изменения. Таким образом, если что-то пойдет не так, вы можете восстановить копию и начать заново!

Файлы конфигурации важны

Более того, они являются неотъемлемой частью использования Linux. Знание того, как правильно их редактировать, поможет вам бесконечно.

Есть ли какие-то другие важные навыки, которые, по вашему мнению, должны знать пользователи Linux для начинающих и для среднего уровня? Позвольте мне знать в комментариях ниже.

Источник

Чтение конфигурационных файлов без проблем

В данной статье мне бы хотелось рассмотреть проблему загрузки настроек из конфигурационных файлов. Как правило, разработчики используют тяжеловесное и сложное API из пространства имен System.Configuration и считывают настройки шаг за шагом. В случае если в конфигурационном файле секция, которую надо считать, представляет из себя простую структуру (без вложенностей), то, в принципе, считывание не вызывает особых проблем. Однако, как только конфигурация усложняется и/или появляются вложенные подсекции, то распарсивание превращается в настоящую головную боль. Для простого и быстрого считывания настроек и загрузку их в память отлично подойдет библиотека ConfigurationParser, которая возьмет на себя все сложности работы с конфигурационными файлами.

Установка

Данная библиотека доступна для скачивания через NuGet. Или вы можете скачать исходники из GitHub.

Использование

Для демонстрации возможностей библиотеки давайте представим, что нашей программе требуются настройки для подключения к нескольким внешним сервисам, базам данных и наша система должна уметь отправлять письма администраторам системы. Мы решили, что данные настройки будут находится в трех секциях.

Следующим шагом необходимо создать классы, в которых мы будем хранить настройки системы.

В конфигурационном файле нам необходимо объявить, что мы будем использовать ConfigurationParser.

Теперь мы можем считать нашу конфигурацию легко и непринужденно:

После выполнения кода у нас будет создано 2 объекта, которые и будут содержать наши настройки. Как вы можете справедливо заметить, мы не считываем SmtpSettings. Это сделано для того, чтобы продемонстрировать дополнительные возможности утилиты.

В различных проектах вам может понадобиться записывать разнообразные настройки в конфигурационные файлы и иметь свою логику как с ними работать. Утилита спроектирована таким образом, что вы можете ее легко расширить путем добавления новой стратегии и покрыть все сценарии, которые вам нужны. Для примера, давайте рассмотрим секцию Recipients:

Эта секция содержит список email-ов, разделенных точкой с запятой. Согласно нашему ТЗ и классу мы должны записать каждый адрес как отдельный элемент в массиве. Для выполнения поставленной задачи нам надо создать класс SplitRecipientsCustomStrategy и реализовать интерфейс ICustomMappingStrategy

Внутри нам необходимо реализовать алгоритм распарсивания значения из секции в соответствии с нашим заданием. Необходимо учитывать, что метод Map(string input, Type itemType) вызывается если значение прочитано из атрибута, а метод Map(XmlNode xmlNode, Type itemType) вызывается если значение прочитано из секции. Согласно конфигурационному файлу, значение будет прочитано из секции.

После этого нам необходимо пометить свойство Recipients атрибутом CustomStrategy в котором нужно указать, что за «стратегия» будет использоваться для данного поля:

Вот и все, теперь мы можем считать настройки электронной почты.

Как вы видите, ConfigurationParser делает работу по чтению настроек из конфигурационного файла очень удобной и сохраняет кучу времени. При этом она легко расширяется благодаря подключению новых стратегий.

Хотелось бы упомянуть еще об одной возможности данной библиотеки. Это аттрибут PropertyMappingAttribute. Его нужно использовать в случае когда название элемента в конфигурационном файле не совпадает с названием свойства.
Например, у нас есть секция Email, где записывается текущий почтовый адрес пользователя.

А вот в класс для хранения данного значения у нас предусмотрено свойство UserEmail. Чтобы настройки правильно считались необходимо поменить данное свойство аттрибутом PropertyMappingAttribute.

Таким образом названия элементов в конфигурационном файле необязательно должны совпадать с именами свойств.

Если у вас возникнут какие-либо вопросы или предложения, пожалуйста, пишите их в комментариях, я с радостью на них отвечу.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *