INI 파일

INI file
INI
INI file icon.png
파일 이름 확장자
.ini
인터넷 미디어 유형
text/module, application/textedit, zz-application/zz-winasoc-ini
포맷의 종류초기화/설정 파일

INI 파일컴퓨터 소프트웨어용 컨피규레이션파일입니다.컴퓨터 소프트웨어의 컨피규레이션파일은, 속성의 키와 의 페어로 구성되는 구조 및 구문과 속성을 [1]정리하는 섹션으로 구성됩니다.이러한 컨피규레이션파일의 이름은, 이 소프트웨어 설정의 방법을 보급한 MS-DOS operating system에서 사용되는, 초기화를 위한 파일 확장자 INI 에서 유래합니다.이 형식은 많은 구성 컨텍스트에서 비공식 표준이 되었지만 다른 운영 체제의 많은 응용 프로그램에서는 conf나 cfg[2]같은 다른 파일 이름 확장자를 사용합니다.

역사

Windows 의 소프트웨어 설정의 주된 메커니즘은, 텍스트 파일 형식이었습니다.텍스트 행에는, 1 행에 1 개의 키와 값의 페어가 포함되어 섹션으로 정리되어 있습니다.이 형식은 디바이스 드라이버, 글꼴 및 스타트업 런처와 같은 운영 체제 구성 요소에 사용되었습니다.INI 파일은 일반적으로 응용 프로그램에서 개별 [3]설정을 저장하기 위해 사용되었습니다.

이 포맷은 Windows 3.1x를 통해 16비트 Microsoft Windows 플랫폼에서 유지되었습니다.Windows 95 이후 Microsoft는 Windows 레지스트리를 선호하여 개발자들이 INI 파일을 구성에 사용하지 않도록 하기 시작했습니다.이후의 모든 버전의 Windows 에서는, 시스템 설정에 Windows 레지스트리를 사용하고 있습니다만, 위에 구축된 애플리케이션입니다.NET Framework는 특수 XML .config 파일을 사용합니다.초기화 파일 기능은 Windows에서도 사용할 수 있으며 개발자는 계속 사용할 수 있습니다.

Linux Unix 시스템도 시스템 구성에 유사한 파일 형식을 사용합니다.또, 플랫폼에 의존하지 않는 소프트웨어에서는, 이 파일 형식을 사용해 설정할 수 있습니다.이것은 사람이 읽을 수 있고 해석도 간단하기 때문에 그다지 복잡하지 않은 구성 파일에 사용할 수 있는 형식입니다.

Git 구성 파일은 INI [4]파일과 유사합니다.

PHP는 "에 INI 형식을 사용합니다.php.iniWindows 시스템과 Linux [5][6]시스템 모두 컨피규레이션파일을 사용합니다.

desktop.ini 파일은 Windows 의 디렉토리([7]디렉토리 아이콘등)의 표시를 결정합니다.

다음 예제 파일에는 소프트웨어 소유자를 위한 섹션과 급여 데이터베이스 연결을 위한 섹션이 있습니다.댓글에는 마지막으로 파일을 수정한 사용자와 수정 이유가 기록됩니다.

; John Doe에 의해 2001년 4월 1일 최종 수정되었습니다. [소유자] 이름. = 신원미상인 조직 = Acme Widgets Inc.  [아쉬움] ; 네트워크 이름 해결이 작동하지 않는 경우 IP 주소를 사용합니다. 서버 = 192.0.2.62 항구 = 143 파일 = "dats.dat" 

포맷

INI는 파서마다 기능이 다른 비공식 형식입니다(INI 방언).일부 기능은 다른 기능보다 다른 파서 간에 더 많이 공유되며 형식의 하드코어로 간주할 수 있습니다(섹션의 경우 각 괄호, 다른 노드를 구분하기 위한 줄 바꿈 등).가능한 한 많은 사투리를 지원할 수 있는 파서를 작성하려는 시도가 [8]존재하며 INI 형식은 보다 완화된 구문을 사용하여 다른 구조화된 형식(JSON, XML)과 동등한 힘을 가진 트리 객체를 표현할 수 있습니다.

안정된 기능

키(속성)

INI 파일에 포함된 기본 요소는 키 또는 속성입니다.모든 키에는 등호(=)로 구분된 이름과 값이 있습니다.등호 왼쪽에 이름이 표시됩니다.Windows 실장에서는 등호 및 세미콜론은 예약된 문자로 키에 표시할 수 없습니다.값에는 임의의 문자를 포함할 수 있습니다.

이름. = 가치 

속성 이름 바깥쪽의 선행 및 후행 공백은 무시됩니다.

섹션

키는 임의로 명명된 섹션으로 그룹화할 수 있지만 그럴 필요는 없습니다.섹션명은 각 괄호([ 및 ])로 둘러싸인 행에 표시됩니다.섹션 선언 후의 모든 키는 해당 섹션과 관련지어집니다."섹션의 끝" 구분 기호는 명시적으로 없습니다. 섹션은 다음 섹션 선언 또는 파일 끝에서 끝납니다.섹션을 중첩할 수 없습니다.

[섹션] 키 1 = a 키2 = b 

대소문자의 구별

윈도우즈 [9]구현에서 섹션 및 속성 이름은 대소문자를 구분하지 않지만 다른 응용 프로그램의 동작은 다를 수 있습니다.

평.

행의 선두에 있는 세미콜론(;)은 코멘트를 나타냅니다.댓글 행은 무시됩니다.

; 코멘트 텍스트 

섹션 및 속성 순서

섹션의 속성 순서와 파일의 섹션 순서는 관련이 없습니다.

다양한 기능

INI 파일 형식이 엄격하게 정의되어 있지 않기 때문에 많은 파서가 이미 설명한 기본 이상의 기능을 지원합니다.다음은 특정 프로그램에서 구현될 수도 있고 구현되지 않을 수도 있는 몇 가지 일반적인 기능의 목록입니다.

글로벌 속성

섹션이 [10]선언되기 전에 선언되는 선택적 "글로벌" 속성을 사용할 수도 있습니다.

이름/값 구분 기호

실장에 따라서는 콜론을 사용할 수 있습니다.:이름/값 딜리미터(등호 기호 포함)로 지정합니다.Linux [8]세계에서는 공백이 사용되기도 합니다.

계층(섹션 중첩)

일부 파서는 점을 경로 구분자로 사용하여 섹션 중첩을 허용합니다.

[섹션] 영역 = wikipedia.org  [섹션]서브섹션] 후우 = 막대기 

경우에 따라서는 상대 네스트도 지원되고 있습니다.선행 도트는 이전 [8]섹션의 네스트를 나타냅니다.

[섹션] 영역 = wikipedia.org  [.서브섹션] 후우 = 막대기 

과거에는 점 대신 중첩을 표현하는 방법도 존재했습니다(예: IBM의 Microsoft Windows용 드라이버 파일).devlist.ini백슬래시가 네스트 딜리미터로 사용되었습니다.[A\B\C]또는 Microsoft Visual Studio의AEMANAGR.INI파일 형식에서 완전히 다른 구문을 사용하였습니다.[A]그리고.B,C,P = V) 일부 파서는 네스트 지원을 전혀 제공하지 않고 계층 블라인드였지만, 네스트는 여전히 부분적으로 에뮬레이트될 수 있습니다.[A.B.C]는 하나의 식별자를 구성합니다.

평.

일부 소프트웨어에서는 세미콜론 대신 숫자 기호(#)를 사용하여 코멘트를 표시할 수 있습니다.특히 Unix에서는 셸 코멘트를 미러링합니다.다른 방언의 키 이름에 숫자 기호가 포함되어 무시될 수 있습니다.예를 들어, 다음 행은 한 방언에서는 주석으로 해석되지만 다른 방언에서는 "#var"라는 이름의 변수를 만듭니다."#var" 값이 무시되면 코멘트의 유사 구현이 형성됩니다.

#var =a 

일부 구현에서는 코멘트는 공백(인라인 코멘트) 뒤에 있는 행(속성 또는 섹션 선언 뒤에 있는 같은 행)에서 시작할 수 있습니다.

변화하다 = a ; 이것은 인라인 코멘트입니다. 후우 = bar # 이것은 또 다른 인라인코멘트입니다. 

WinAPI 함수 GetPrivateProfileString을 포함한 다른 기능에서는 코멘트가 행 자체에 대해 발생해야 합니다.

중복된 이름

대부분의 구현에서는 한 섹션에 지정된 이름의 속성을 하나만 지원합니다.속성명이 두 번째로 출현하면 중단되거나 무시되거나(및 값이 폐기됨), 또는 첫 번째 발생(첫 번째 값이 폐기됨)보다 우선될 수 있습니다.일부 프로그램에서는 중복된 속성 이름을 사용하여 다중값 속성을 구현합니다.

같은 이름의 여러 섹션 선언에 대한 해석도 다양합니다.일부 구현에서는 중복 섹션이 해당 속성을 병합할 뿐이며, 마치 연속적으로 발생하는 것처럼 보입니다.INI 파일의 일부 측면을 무시하거나 중단하는 경우도 있습니다.

따옴표로 묶음

일부 구현에서는 일반적으로 큰따옴표 및/또는 아포스트로피사용하여 값을 따옴표로 묶을 수 있습니다.이를 통해 공백의 명시적 선언 및/또는 특수 문자(등호, 세미콜론 등)의 따옴표를 사용할 수 있습니다.표준 Windows 함수 GetPrivateProfileString은 이를 지원하며 값을 둘러싼 따옴표를 삭제합니다.

이스케이프 문자

일부 구현에서는 이스케이프 문자를 다양한 방식으로 지원합니다(일반적으로 백슬래시 사용).\C 구문에 따릅니다.일부에서는 백슬래시 직후에 EOL(End-of-Line)이 발생하면 줄 바꿈이 무시되고 INI 파일의 다음 실제 줄에 '논리 줄'이 계속됩니다.이스케이프 시퀀스를 사용한 다양한 특수 문자 구현도 [11]볼 수 있습니다.

일반적인 이스케이프 시퀀스
순서 의미.
\\ \(단일 백슬래시, 이스케이프 문자 이스케이프)
\' 아포스트로피
\" 큰따옴표
\0 Null 문자
\a 벨/경보/음성
\b 일부 응용 프로그램의 경우 백스페이스, 벨 문자
\t 탭 문자
\r 캐리지 리턴
\n 라인 피드
\; 세미콜론
\# 숫자 기호
\= 등호
\: 콜론
\x???? ?에 대응하는 16진수 코드 포인트를 가진 Unicode 문자:무슨 일입니까?

INI 파일 액세스

Windows에서 Profile API는 Windows .ini 파일의 설정을 읽고 쓰는 데 사용되는 프로그래밍 인터페이스입니다.예를 들어 GetPrivateProfileString 함수는 초기화 파일의 지정된 섹션에서 문자열을 가져옵니다.('프라이빗' 프로파일은GetProfileStringWIN에서 가져옵니다.INI).

다음 샘플 C 프로그램은 위의 샘플 INI 파일에서 속성 값을 읽는 방법을 보여 줍니다(구성 파일의 이름을 입력).dbsettings.ini):

#실패하다 <윈도우>h>  인트 주된(인트 argc, _TCHAR *argv[]) {   _TCHAR dbserver[1000];   인트 dbport;   GetPrivateProfileString("실패", "서버", "127.0.0.1", dbserver, 크기(dbserver) / 크기(dbserver[0]), ".\\dbsettings.ini");   dbport = Get Private Profile내부("실패", "좌현", 143, ".\\dbsettings.ini");   // N.B. WritePrivateProfileInt()가 존재하지 않습니다.   돌아가다 0; } 

GetPrivateProfileString 함수의 세 번째 파라미터는 디폴트값으로 위의 2개의 함수 호출에서는 각각 "127.0.0.1"과 143입니다.이 파라미터에 대해 지정된 인수가 NULL인 경우 기본값은 빈 문자열 " 입니다.

UNIX에서는 INI 파일에 액세스하기 위한 다양한 구성 라이브러리가 존재합니다.이들은 프레임워크와 툴킷에 이미 포함되어 있는 경우가 많습니다.UNIX용 INI 파서의 예로는 GLib, iniparser, libconfini 등이 있습니다.

INI 파서 비교

이름. 섹션 지원 섹션 네스트 지원 엔트리[12] 인식 비활성화 멀티라인[13] 지원 값 유형 읽기/쓰기 지원 플랫폼 면허증. 프로그래밍 언어 최신 릴리즈 버전
Config Parser[14][15] 네. 네. 아니요. 비표준[16] 부울, 숫자, 문자열 읽기 + 쓰기 *BSD, Linux, macOS, Windows PSFL C(실장), Python(사용방법) 3.9.7[17]
GLIB[18] 네. 네. 아니요. 아니요. 부울, 숫자, 문자열, 배열 읽기 + 쓰기 *BSD, Linux, macOS, Windows LGPL C 2.66.7(2021년 2월 11일, 17개월(2021-02-11) [±][19]

[20]

할 수 없다[21] 네. 아니요. 아니요. 아니요. 부울, 숫자, 문자열 읽기 + 쓰기 *BSD, Linux, macOS, Windows 아파치 가세요 1.2.0[22]
[23] 네. 아니요. 아니요. 비표준[24] 부울, 숫자, 문자열 읽어주세요 *BSD, Linux, macOS, Windows BSD C 53[25]
인니파서[26] 네. 아니요. 아니요. 네. 부울, 숫자, 문자열 읽기 + 쓰기 *BSD, Linux, macOS, Windows MIT C 4.1[27]
자바(경유)java.util.Properties[28] 아니요. 아니요. 아니요. 네. 스트링 읽기 + 쓰기 플랫폼에 구애받지 않다 듀얼 라이선스: GPL 버전2(클래스 패스 [29]예외 포함) 및 자체 라이선스.[30] C(실장), Java(사용방법) 18.0.1.1 (2022년 5월 2일, 3개월 전 (2022-05-02) [±]

17.0.3.1 LTS (2022년 5월 2일, 3개월 전(2022-05-02)) [±]
11.0.15.1 LTS (2022년 5월 2일, 3개월 전 (2022-05-02)[31] [±]
8u333 LTS (2022년 5월 2일, 3개월 전 (2022-05-02)[32] [±]

libconfini[33] 네. 네. 네. 네. 부울, 숫자, 문자열, 배열 읽어주세요 *BSD, Linux, macOS, Windows GPL C 1.16.2[34]
PHP (경유)parse_ini_file()[35] 네. 네. 네. 아니요. 숫자, 문자열, 특수한 순서 읽어주세요 Linux, macOS, Windows PHP 라이선스 v3.01[36] C(실장), PHP(사용방법) 8.1.9[37] (2022년 8월 4일, 1일 전 (2022년 8월 4일))
[38] 네. 아니요. 네. 네. 부울, 숫자, 문자열 읽기 + 쓰기 플랫폼에 구애받지 않다 GPL 파이썬 1.0[39]
Rude Config(Rude Config)[40] 네. 아니요. 아니요. 아니요. 부울, 숫자, 문자열 읽기 + 쓰기 Linux, Windows GPL C++ 단종 – 최종 버전은 5.0.5(2009년 11월[41] 이후
Windows API 네. 아니요. 아니요. 아니요. 숫자, 문자열, 구조 읽기 + 쓰기(비파괴) 창문들 독자 사양 C 21H2 (10.0.22000.832) (2022년 7월 21일, 15일 전 (2022-07-21)[42] [±]
와인(Windows API 구현) 네. 아니요. 아니요. 아니요. 숫자, 문자열, 구조 읽기 + 쓰기(비파괴) Linux, macOS, Windows LGPL C 7.0 2022년[43] 1월 18일; 6개월 전 (2022년 1월 18일)
이름. 섹션 지원 섹션 네스트 지원 엔트리 인식 비활성화 멀티라인 지원 값 유형 읽기/쓰기 지원 플랫폼 면허증. 프로그래밍 언어 최신 릴리즈 버전

파일 매핑

초기화 파일 매핑은 INI 파일과 레지스트리 [44][45]간에 매핑을 만듭니다.Windows NT 및 Windows 95에서 기존의 .ini 파일에 설정을 저장하는 것에서 새로운 Windows 레지스트리로 이행하는 방법으로 도입되었습니다.파일 매핑은 프로파일 API 콜을 트랩하여IniFileMapping레지스트리 섹션: 레지스트리의 적절한 장소에 읽기 및 쓰기를 지시합니다.

다음 예에서는 예를 들어 dbsettings.ini라는 이름의 설정 파일에서 소유자 섹션에서 이름 키를 가져오는 문자열 호출을 할 수 있습니다.반환되는 값은 "John Doe" 문자열이어야 합니다.

GetPrivateProfileString("owner", "name", ...", "c:\\programs\oldprogram\dbsettings.ini"),

INI 매핑은 이 프로파일 API 콜을 수신하여 지정된 파일 이름 내의 경로를 무시하고 디렉토리 아래 파일 이름과 일치하는 레지스트리 키가 있는지 확인합니다.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
CurrentVersion\IniFileMapping

이것이 존재할 경우 요청된 섹션과 일치하는 엔트리 이름을 찾습니다.엔트리가 발견되면 INI 매핑은 해당 값을 레지스트리의 다른 부분에 대한 포인터로 사용합니다.그런 다음 레지스트리의 해당 부분에서 요청된 INI 설정을 검색합니다.

일치하는 엔트리 이름을 찾을 수 없고 아래에 엔트리가 있는 경우(Default)엔트리의 이름을 지정합니다.INI 매핑에서는 대신 이 이름을 사용합니다.따라서 각 섹션 이름은 자체 엔트리가 필요하지 않습니다.

HKEY_LOCAL_MACHINE\소프트웨어\...\IniFileMapping\dbsettings.ini
(Default) @USR: 소프트웨어\oldprogs\insettings\all
database 소프트웨어\oldprogs\insettings\db

따라서 이 경우 [owner]섹션의 프로파일콜은 다음과 같이 매핑됩니다.

HKEY_CURRENT_USER\소프트웨어\oldprogs\insettings\all
name 신원미상인
organization Acme 제품

여기서 "는name요청된 INI 키와 일치하는 레지스트리 엔트리 이름이 발견되었습니다.다음으로 "John Doe" 값이 프로파일콜로 반환됩니다.이 경우 기본값의 @ 접두사는 디스크의 dbsettings.ini 파일로 읽기가 전송되지 않도록 합니다.그 결과 레지스트리에서 찾을 수 없는 설정은 INI 파일에서 검색되지 않습니다.

"database「레지스트리 엔트리의 값에는 @ 프리픽스가 없습니다.따라서 [database]섹션의 경우에만 레지스트리의 설정을 먼저 취득한 후 디스크의 dbsettings.ini 파일을 설정합니다.

대체 수단

Windows 95 이후, Microsoft 는 INI [46]파일보다 Windows 레지스트리를 사용하는 것을 강하게 홍보하기 시작했습니다.INI 파일은 일반적으로 두 가지 수준(섹션 및 속성)으로 제한되며 이진 데이터를 제대로 처리하지 않습니다.그러나 레지스트리가 일원적이고 불투명하며 바이너리하며 파일 시스템과 동기화해야 하며 운영 체제의 [47]단일 장애 지점을 나타내므로 이 결정은 비판의 영향을 받지 않습니다.

이후 XML 기반의 Configuration파일은 텍스트파일에서의 [citation needed]Configuration 부호화에 널리 사용되고 있습니다.XML은 임의로 복잡한 레벨과 네스트를 가능하게 하며 바이너리 데이터를 인코딩하기 위한 표준 메커니즘을 갖추고 있습니다.

최근에는 JSON, TOML, YAML 등의 데이터 시리얼라이제이션 포맷이 구성 포맷으로 기능할 수 있습니다.이 세 가지 대체 형식은 임의로 중첩할 수 있지만 INI 파일과는 구문이 다릅니다.그 중 TOML은 INI와 가장 유사하지만 TOML을 INI의 큰 부분집합과 의도적으로 호환되도록 하자는 아이디어는 [48]거부되었습니다.

그러나 최신 INI 파서는 XML, JSON, TOMLYAML동일한 임의 수준의 중첩을 허용하며, 동일한 [49]것을 표현하기 위한 여러 구문을 허용함으로써 INI 파일의 "비공식 상태"를 유지하지만 입력된 값과 유니코드를 동등한 수준으로 지원합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Microsoft TechNet: Ini 파일 항목 구성
  2. ^ .conf 초기화 파일
  3. ^ Microsoft: Windows NT 워크스테이션 리소스 키트
  4. ^ git-config 컨피규레이션파일 [1]
  5. ^ 라스무스 러도프, 케빈 타트로, 피터 매킨타이어"PHP 프로그래밍 중"섹션 "parse_ini_file", "확장 INI 엔트리" 등
  6. ^ 크리스티안 웬즈."PHPMySQL 문구집", "INI 파일 파싱" 섹션.인용: "...INI 파일 형식..."은 Windows 세계에서 매우 널리 사용되었지만, 오늘날에는 PHP와 같은 소프트웨어 제품 구성도 주도하고 있습니다.예를 들면... php.ini"
  7. ^ Codrut Neagu, "Why Are Two Two Desktop.ini Files on My Desktop and What Do They Do?" (데스크탑에 데스크톱.ini 파일이 두 개 있는 이유와 작업 내용)
  8. ^ a b c libconfini 라이브러리 기능 설명서
  9. ^ "GetPrivateProfileString function". Microsoft Developer Network. Microsoft. Retrieved 2012-06-02.
  10. ^ org.apache.commons.configuration2용 Apache 문서.INIConfiguration, Apache 소프트웨어 재단
  11. ^ Cloanto 구현
  12. ^ INI 파일 작성자 사이에서는 불필요한 엔트리를 완전히 삭제하는 대신 비활성화하기 위해 코멘트 아웃하는 것이 일반적입니다.키 참조a다음 예시는 입니다.
    [섹션]
    #a=a
    b=b
  13. ^ 여기서 회선 계속을 위한 표준 구문은 iniparser, libconfini 및 libconfini에 의해 구현된 백슬래시 시퀀스에 이어 회선 끊기를 참조합니다.java.util.Properties
  14. ^ 프레드릭 룬드.'피톤 스탠다드 라이브러리'2001. 섹션 "ConfigParser 모듈." 페이지 143
  15. ^ "ConfigParser - 구성 파일 파서"
  16. ^ 사용하는 언어의 구문(Python)에 따라 노드를 여러 줄에 걸쳐 배치하는 ConfigParser에서는 일반적인 백슬래시 + 줄 바꿈 대신 다음 줄에 더 깊은 들여쓰기가 필요합니다( 참조: configparser - 구성 파일 파서).
  17. ^ 버전별 Python 문서
  18. ^ GLib 키 - 값 파일 파서
  19. ^ Withnall, Philip (11 Feb 2021). "glib 2.66.7". GNOME ftp-release (Mailing list). Retrieved 12 February 2021.
  20. ^ 릴리즈 · GNOME / glib
  21. ^ 불가해한 문서
  22. ^ 릴리즈 · inifile
  23. ^ INIH README
  24. ^ 들여쓰기를 사용하여 ConfigParser의 접근방식을 명시적으로 따릅니다(자세한 내용은 프로젝트 매뉴얼 참조).
  25. ^ 발매 · benhoyt / inih
  26. ^ iniparser 문서
  27. ^ 릴리즈 · ndevilla / iniparser
  28. ^ 속성(Java Platform SE 8)
  29. ^ "OpenJDK: GPLv2 + Classpath Exception". Openjdk.java.net. 1989-04-01. Retrieved 2016-02-09.
  30. ^ "BCL For Java SE". Oracle.com. 2013-04-02. Retrieved 2016-02-09.
  31. ^ "JDK Releases". Oracle Corporation. Retrieved 2022-01-21.
  32. ^ "JDK Releases". Oracle Corporation. Retrieved 2022-01-21.
  33. ^ libconfini 문서
  34. ^ 릴리즈 · madmurphy / libconfini
  35. ^ PHP. "parse_ini_file() — Parse a configuration file". Official PHP documentation. Retrieved 2022-07-19.
  36. ^ PHP 라이선스 v3.01 [ 2 ]
  37. ^ "Version 8.1.9". 4 August 2022. Retrieved 5 August 2022.
  38. ^
  39. ^ 태그 · Whatemybutter / PyINI
  40. ^ RudeConfig 매뉴얼
  41. ^ 릴리스 · Rude Config
  42. ^ "July 21, 2022—KB5015882 (OS Build 22000.832)". Microsoft Support. Microsoft. July 21, 2022.
  43. ^ "Wine 7.0 Released". 18 January 2022. Retrieved 18 January 2022.
  44. ^ 초기화 파일과 레지스트리, Windows NT 워크스테이션 리소스 키트, Microsoft TechNet
  45. ^ NT 레지스트리 관리, Windows NT 레지스트리 관리, Paul Robichaux, O'Reilly Media
  46. ^ 시스템 레지스트리
  47. ^ Windows 레지스트리는 좋은 생각이었습니까?– 코딩 호러
  48. ^ "Comment on ".INI compatibility is a worthy goal" issue on GitHub".
  49. ^ libconfini/README

외부 링크