- Национальная библиотека им. Н. Э. Баумана Bauman National Library
- Персональные инструменты
- .ini (Initialization File)
- Содержание
- Формат
- Ключи (свойства)
- Sections
- Нечувствительность к регистру
- Комментарии
- Различные особенности
- Пустые строки
- Комментарии
- Повторяющиеся имена
- Глобальные свойства
- Иерархия
- Наименование/значение разделителя
- Цитированные значения
- Пробелы
- Порядок разделов и свойств
- Пример
- Доступ к INI файлам
- Отображение файла в память
- Альтернативы
- Использование INI-файла в C в Linux
- 7 ответов
- Расположение файлов ini/config в linux / unix?
- 7 ответов
- Новые Приложения
- Старые Приложения
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
.ini (Initialization File)
Расширение файла | .ini |
---|---|
Тип кода | текстовый файл |
Разработчик | Microsoft Windows |
Начальная версия | 20 November 1985 года ; 35 years ago ( 1985-11-20 ) |
Последний релиз | |
Тип формата | текстовый файл |
Содержится | Microsoft Windows |
Открытый формат? | Yes |
ini-файл (англ. Initialization file ) — это файл конфигурации, который содержит данные настроек для Microsoft Windows, Microsoft Windows NT и некоторых приложений.
Формат файла «INI» является неофициальным стандартом для файлов конфигурации для некоторых платформ или программного обеспечения. Файлы INI представляют собой простые текстовые файлы с базовой структурой, состоящей из разделов, свойств и значений [Источник 1] .
В MS-DOS и 16-разрядных Windows-платформах под Windows ME файл INI служил основным механизмом для настройки операционной системы и установленных функций приложений, таких как драйверы устройств, шрифты, конфигурации запуска и параметры, которые было необходимо инициализировать в Загрузки Windows. Файлы INI также обычно используются приложениями для хранения своих индивидуальных настроек. [Источник 2]
В Windows NT Microsoft представила реестр и начала отучать разработчиков от использования файлов INI для настройки. Все последующие версии Windows использовали системный реестр Windows, а приложения, созданные на платформе .NET Framework, использовали специальные XML-файлы .config. Однако API все еще существуют в Windows, и разработчики все еще могут их использовать.
Имя «INI-файл» происходит от обычно используемого расширения имени файла .INI , что означает «инициализация». Другими распространенными расширениями файлов инициализации являются .CFG , .conf ,и .TXT , особенно «config.txt».
Системы Linux и Unix также используют одинаковый формат файлов для настройки системы. Кроме того, программное обеспечение, ориентированное на платформу, может использовать этот формат для конфигурации. Он удобочитаемый и простой для разбора, поэтому он является удобным форматом для файлов конфигурации, которые не требуют значительно большей сложности.
Содержание
Формат
Ключи (свойства)
Основной элемент, содержащийся в ini файл — «ключ» или «значение». Каждый ключ имеет имя и значение, разделенные на знак равенства ( = ). Имя отображается слева от знака равенства.
Sections
Ключи могут (но не обязательно) быть сгруппированы в произвольно названные «разделы». Название раздела отображается на отдельной строке в квадратных скобках ( [ и ] ). Все ключи после объявления раздела связаны с этим разделом. Нет явного «конца раздела»; разделы заканчиваются в следующей декларации раздела или в конце файла. Разделы не могут быть вложенными.
Нечувствительность к регистру
Имена разделов и свойств не зависят от регистра в Windows [Источник 3] .
Комментарии
Точка с запятой ( ; ) в начале строки означают комментарий. Строки комментариев игнорируются.
Различные особенности
Формат файла INI не достаточно определенный. Многие программы поддерживают функции, выходящие за рамки описанных выше основ. Ниже приведен список некоторых общих функций, которые могут или не могут быть реализованы в любой заданной программе
Пустые строки
Некоторые устаревшие программы не позволяют иметь пустые строки. Поэтому каждая строка должна быть заголовком раздела, свойством или комментарием.
Комментарии
Некоторые программы поддерживают использование знака ( # ) в качестве альтернативы точки с запятой для указания комментариев. Практически говоря, использование его для начала строки может эффективно изменить имя переменной в этой строке. Например, следующая строка создает переменную с именем «#var», но не с именем «var»; Это иногда используется для создания псевдореализации комментария.
В более общем плане использование знака числа непредсказуемо, как в следующих строках (обратите внимание на пробел после знака числа во второй строке). По этой причине знак «#» не следует использовать для запуска комментариев.
В некоторых реализациях, комментарий может начинаться в любом месте на линии, в том числе на той же строке после свойства или объявления. В другие, в том числе по WinAPI функция GetPrivateProfileString , комментариев должна происходить на отдельной линии .
Повторяющиеся имена
Большинство реализаций поддерживают только одно свойство с заданным именем в разделе. Второе вхождение имени свойства может вызвать прерывание, оно может быть проигнорировано (и значение сброшено), или оно может переопределить первый вариант (с отброшенным первым значением). Некоторые программы используют повторяющиеся имена свойств для реализации многозначных свойств.
Интерпретация объявлений с несколькими разделами с одинаковым именем также различается. В некоторых реализациях дублированные разделы просто объединяют свои свойства вместе, как если бы они происходили соприкасаясь. Другие могут прервать или игнорировать некоторые аспекты INI-файла.
Глобальные свойства
Необязательные «глобальные» свойства также могут быть разрешены, которые объявляются перед объявлением любого раздела [Источник 4] .
Иерархия
Чаще всего, ini-файлы не имеют иерархии разделов в разделах.
Наименование/значение разделителя
Некоторые реализации допускают использование двоеточия ( : ) в качестве разделителя имени / значения (вместо знака равенства).
Цитированные значения
Некоторые реализации позволяют указывать значения, используя двойные кавычки и/или апострофы. Это позволяет явно объявлять пробелы и / или цитирование специальных символов (равно, точка с запятой и т.д.). Стандартная функция Windows GetPrivateProfileString поддерживает это и удаляет кавычки, которые окружают значения.
Пробелы
Интерпретация пробелов различна. Большинство реализаций игнорируют начальные и конечные пробелы вокруг имени свойства. Некоторые даже игнорируют пробелы в значениях (например, эквивалент имен «host name» и «hostname»). В некоторых реализациях также игнорируются начальные и конечные пробелы вокруг значения свойства; Другие считают, что все символы, следующие за знаком равенства (включая пробелы), являются частью значения.
Порядок разделов и свойств
В большинстве случаев порядок свойств в разделе и порядок секций в файле значения не имеет, но реализации могут отличаться.
Пример
Ниже приведен пример файла INI для мнимой программы. Он состоит из двух разделов: один для владельца программного обеспечения и один для подключения базы данных расчета заработной платы. Заметьте, что кто модифицировал последний файл и почему вместо IP-адреса используется DNS имя.
Доступ к INI файлам
В Windows, «API профиль» — это программный интерфейс, используемый для чтения и записи параметров из классических файлов .ini в Windows. Например, функция GetPrivateProfileString извлекает строку из указанного раздела в файле инициализации.
Следующий пример программы на языке C демонстрирует чтение значений свойств из вышеупомянутого образца файла INI (пусть имя файла конфигурации будет dbsettings.ini ).
В Unix существует множество различных конфигурационных библиотек для доступа к файлам INI. Они часто уже включены в рамки и инструментальные средства. Примеры парсеров INI для UNIX включают iniparserи libconfiniи Elektra Initiative.
Отображение файла в память
Отображение файла в память. [Источник 5] создает сопоставление между файлом INI и реестром. Оно было представлено в Windows NT и Windows 95 в качестве способа перехода от сохранения настроек в классических .ini-файлах к новому реестру Windows. Ловушка отображения файла в памяти Профиля API и, используя параметры из раздела реестра IniFileMapping , направляет чтение и запись в соответствующие места в реестре.
Используя вышеприведенный пример, можно было бы сделать строковый вызов для извлечения ключа name из раздела owner» из файла настроек, называемого, скажем, dbsettings.ini . Возвращаемое значение должно быть строкой «John Doe»:
INI сопоставление принимает этот вызов API профиля, игнорирует любой путь в указанном имени файла и проверяет, есть ли ключ реестра, соответствующий имени файла в:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
CurrentVersion\IniFileMapping
Если он существует, он ищет имя записи, соответствующее запрашиваемому разделу. Если запись найдена, INI сопоставление использует ее значение как указатель на другую часть реестра. Затем он ищет запрошенный параметр INI в той части реестра.
Если подходящее имя записи не найдено и есть запись под названием (Default) , INI сопоставление использует последнее. Таким образом, каждое имя секции не нуждается в отдельной записи.
HKEY_LOCAL_MACHINE\Software\. \IniFileMapping\dbsettings.ini | |
---|---|
(Default) | @USR:Software\oldprogs\inisettings\all |
database | USR:Software\oldprogs\inisettings\db |
Таким образом, в этом случае вызов профиля для раздела [owner] отображается на:
HKEY_CURRENT_USER\Software\oldprogs\inisettings\all | |
---|---|
name | John Doe |
organization | Acme Products |
где найденное имя записи » name » в соответствует запрошенному ключу INI. Значение «John Doe» затем возвращается к вызову Profile. В этом случае префикс @ по умолчанию запрещает какие-либо чтения обращаться к файлу dbsettings.ini на диске. Результатом является то, что любые настройки, не найденные в реестре, не просматриваются в файле INI.
Запись » database » в реестре не имеет префикса @ для значения; Таким образом, для раздела [database] only сначала выполняются параметры в реестре, а затем параметры в файле dbsettings.ini на диске.
Альтернативы
Начиная с Windows 95, Microsoft начала активно продвигать использование реестра Windows в файле INI. . [Источник 6] Файлы INI обычно ограничены двумя уровнями (разделами и свойствами) и не обрабатывают двоичные данные хорошо
Позднее конфигурационные файлы на основе XML стали популярным выбором для настройки кодировки в текстовых файлах. XML допускает произвольные сложные уровни и вложенность и имеет стандартные механизмы для кодирования двоичных данных.
Совсем недавно, форматы данных сериализации, таких как JSON, TOML и YAML могут служить в качестве формата конфигурации. Эти три альтернативных формата могут встраиваться произвольно, но имеют более мощный синтаксис, чем INI-файл.
Источник
Использование INI-файла в C в Linux
есть ли стандартный способ чтения такой конфигурации, как INI файлы для Linux с использованием C?
Я работаю над портативным компьютером на базе Linux и пишу код в C.
в противном случае я хотел бы знать о любых альтернативах.
последнее обновление:
Я исследовал и даже использовал LibConfig. Но след ноги высок и мое использование слишком просто. Итак, чтобы уменьшить след, я выкатил свой собственный реализация. Реализация не слишком универсальна, на самом деле, на данный момент довольно сопряжена. Файл конфигурации анализируется один раз во время запуска приложения и устанавливается в некоторые глобальные переменные.
7 ответов
простая библиотека для обработки структурированных файлов конфигурации, вроде этого:
нет, нет одного стандартного способа. Извините, но это, наверное, самый точный ответ 🙂
вы могли бы посмотреть на это список библиотек файлов конфигурации Linux, хотя. Это может быть полезно.
вот четыре варианта:
Если вы можете использовать (отлично, в любом приложении на основе C) Глеб, Она имеет парсер файлов ключ-значение, которая подходит для .ini файлы-стиль. Конечно, вы также получите доступ к различным (очень хорошим) структурам данных в glib, «бесплатно».
есть обновленная вилка iniparser в ccan, первоначальный автор не смог уделить ему много внимания на протяжении многих лет. Отказ от ответственности — я поддерживаю его.
кроме того, iniparser содержит словарь, который очень полезен сам по себе.
Если вам нужен быстрый и небольшой код только для чтения конфигурационных файлах, я предлагаю inih
он загружает содержимое файла конфигурации только один раз, анализирует содержимое и вызывает функцию обратного вызова для каждой пары ключ/значение.
действительно мало. Его можно использовать на врезанных системах тоже.
Я ненавижу предлагать что-то совершенно другое в предложении XML, но libexpat довольно минимален, но делает XML.
Я пришел к этому выводу, так как у меня был тот же вопрос, что и у вас, но потом я понял, что проект уже связан с libexpat, и я, вероятно, должен просто использовать это.
Источник
Расположение файлов ini/config в linux / unix?
два вопроса, на самом деле:
(1) существует ли стандарт/соглашение относительно размещения в файлах конфигурации? Для системы или квази-система программ, они, кажется, обычно где-то в /etc. Это кажется менее ясным для простых прикладных программ или pgms, которые с недостаточными привилегиями для /etc.
(2)Существует несколько способов предоставления информации программе, например переменные среды, параметры командной строки, ini-файлы и т. д. При обработке параметров программы существует стандартная иерархия того, что имеет приоритет? Е. Г. ли параметр командной строки переопределить файл инициализации? Наоборот? Или это полностью зависит от разработчика?
7 ответов
- обычно system / global config хранится где-то под /etc.
- пользовательский config хранится в домашнем каталоге пользователя, часто как скрытый файл, иногда как скрытый каталог, содержащий не скрытые файлы (и, возможно, больше подкаталогов).
вообще говоря, параметры командной строки будут переопределять переменные среды, которые будут переопределять пользовательские значения по умолчанию, которые будут переопределять системные значения по умолчанию.
вы должны придерживаться своего приложения к спецификация базового каталога XDG. Большинство ответов здесь либо устарели, либо ошибочны.
ваше приложение должно хранить и загружать файлы данных и конфигурации в / из каталогов, указанных следующими переменными среды:
- $XDG_DATA_HOME (по умолчанию: «$HOME/.local/share» ): пользовательские данные.
- $XDG_CONFIG_HOME (по умолчанию: «$HOME/.config» ): пользовательские файлы конфигурации.
- $XDG_DATA_DIRS (по умолчанию: «/usr/local/share/:/usr/share/» ): приоритет-упорядоченный набор каталогов данных системы.
- $XDG_CONFIG_DIRS (по умолчанию: «/etc/xdg» ): приоритет-упорядоченный набор каталогов конфигурации системы.
- $XDG_CACHE_HOME (по умолчанию: «$HOME/.cache» ): пользовательские файлы несущественных данных.
вы должны сначала определить, если файл в вопрос есть:
- файл конфигурации ( $XDG_CONFIG_HOME:$XDG_CONFIG_DIRS );
- файл данных ( $XDG_DATA_HOME:$XDG_DATA_DIRS ) или
- несущественный (кэш) файл ( $XDG_CACHE_HOME ).
рекомендуется, чтобы ваше приложение помещало свои файлы в подкаталог вышеуказанных каталогов. Обычно, что-то вроде $XDG_DATA_DIRS//filename или $XDG_DATA_DIRS/ //filename .
при загрузке сначала попробуйте загрузить файл из пользовательских каталогов ( $XDG_*_HOME ) и, если не удалось, из системных каталогов ( $XDG_*_DIRS ). При сохранении сохраняйте только в пользовательских каталогах (поскольку пользователь, вероятно, не будет иметь доступа на запись в системные каталоги).
для других, более ориентированных на пользователя каталогах, обратитесь к каталоги пользователей кода валюты XDG спецификация. Он определяет каталоги для рабочего стола, загрузки, документы, видео и т. д.
Новые Приложения
/.config/yourapp/* может быть INF, JSON, YML или любой формат плавает вашу лодку и любые файлы. yourapp должно соответствовать вашему исполняемому имени или быть пространством имен с вашей организацией/компанией/именем пользователя/дескриптором
Старые Приложения
конфигурация для каждого пользователя, обычно прямо в вашем домашнем каталоге.
/.yourapp/ для нескольких файлов + данные, как правило, в
глобальные конфигурации, как правило, в /etc/appname файл или .
глобальные данные приложения: /var/lib/yourapp/
кэширование данных: /var/cache/
данные журнала: /var/log/yourapp/
дополнительная информация от tutorialhelpdesk.com
в структура каталогов Linux и других Unix-подобных систем и деталей каталога.
в Windows почти все программы устанавливают свои файлы (все файлы) в каталог с именем: «Program Files» в Linux это не так. Система каталогов классифицирует все установленные файлы. Все файлы конфигурации находятся в /etc , все двоичные файлы находятся в /bin или /usr/bin или /usr/local/bin . Здесь вся структура каталогов вместе с тем, что они содержат:
/ — корень каталог, который образует основу файловой системы. Все файлы и каталоги логически содержатся в корневом каталоге независимо от их физического расположения.
/bin — содержит исполняемые программы, которые являются частью операционной системы Linux. Многие команды Linux, такие как cat, cp, ls, more и tar, находятся в /bin
/boot — содержит ядро Linux и другие файлы, необходимые менеджерам загрузки LILO и GRUB.
/dev — Содержит все файлы устройств. Linux рассматривает каждое устройство как специальный файл. Все такие файлы находятся в /dev .
/etc — содержит большинство файлов конфигурации системы и скрипты инициализации в /etc/rc.d поддиректории.
/home — домашний каталог является родительским для домашних каталогов пользователей.
/lib — содержит файлы библиотеки, включая загружаемые модули драйверов, необходимые для загрузки системы.
/lost+found — каталог потерянный файл. Каждый раздел диска имеет потерянный + найденный каталог.
/media — каталог для монтажа файловых систем на съемных носителях, таких как диски CD-ROM, дискеты и Zip-накопители.
/mnt — каталог для временно смонтированных файловых системах.
/opt — дополнительные программные пакеты копировать / устанавливать файлы здесь.
/proc — специальный каталог в виртуальной файловой системе. Он содержит информацию о различных аспектах Linux система.
/root — домашний каталог пользователя root.
/sbin — содержит административные двоичные файлы. Такие команды, как mount, shutdown, umount, находятся здесь.
/srv — содержит данные для сервисов (HTTP, FTP и т. д.), предлагаемых системой.
/sys — специальный каталог, который содержит информацию об устройствах, как видно из ядра Linux.
/tmp — временный каталог, который можно использовать в качестве scratch directory (хранилище для временных файлов). Содержимое этого каталога очищается при каждой загрузке системы.
/usr — содержит подкаталоги для многих программ, таких как X Window System.
/usr/bin — содержит исполняемые файлы для многих команд Linux. Он не является частью ядра операционной системы Linux.
/usr/include — содержит заголовочные файлы для языков программирования C и c++
/usr/lib — содержит библиотеки для Языками программирования C и C++.
/usr/local — содержит локальные файлы. Он имеет аналогичные каталоги в /usr содержит.
/usr/sbin — содержит административные команды.
/usr/share — содержит общие файлы, такие как файлы конфигурации по умолчанию, изображения, документация и т. д.
/usr/src — содержит исходный код ядра Linux.
/var — содержит различные системные файлы, такие как журнал, почтовые каталоги, спулеров печати и т. д. которые имеют тенденцию меняться в количестве и размере с течением времени.
/var/cache — помещение для хранения кэшированных данных для приложений.
/var/lib — содержит информацию, касающуюся текущего состояния приложений. Программы изменяют это при запуске.
/var/lock — содержит файлы блокировки, которые проверяются приложениями, чтобы ресурс мог использоваться только одним приложением.
/var/log — содержит файлы журнала для различных приложения.
/var/mail — содержит электронные письма пользователей.
/var/opt — содержит переменные данные для пакетов, хранящихся в директории /opt.
/var/run — содержит данные, описывающие систему с момента ее загрузки.
/var/spool — содержит данные, которые ожидают какой-то обработки.
/var/tmp — содержит временные файлы, которые сохраняются между перезагрузками системы.
Источник