본문 바로가기
프로그래밍/GLibㆍGTKㆍGstreamer

gtk 프로그래밍 ini 설정파일 파싱 예제

by makepluscode 2022. 11. 12.
반응형

gtk 프로그래밍 설정 파일 파싱

gtk 프로그래밍 설정 파일

GTK 프로그램에서 (사용자 설정에 의해서) 프로그램이 유연하게 동작해야하는 경우, 설정 파일을 쉽게 파싱할 수 있는 API와 예제를 기록해 둡니다.

테스트환경

  • Windows10, MSYS2 MINGW64, gcc (Rev6, Built by MSYS2 project) 12.2.0
  • gtk4 4.8.2-1
$ gcc --version
gcc.exe (Rev6, Built by MSYS2 project) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ pacman -Qe | grep gtk4
mingw-w64-x86_64-gtk4 4.8.2-1

설정파일 작성하기

첫번째로, 프로그램에서 읽을 config.ini 파일을 작성합니다. [group1] 은 key group 을 의미하며, 설정파일 내의 key 값을 그룹화 할 수 있습니다. 그리고, 실제 key 와 값은 key=value 형식으로 작성합니다. 아래 예제는 설정파일의 key 값들을 일반화 시킨 예제 입니다.

[group1]
str_value=Hello
int_value=4321

Make 파일 작성하기

MINGW64 환경에서 Makefile 작성하는 것은 Linux 보다 조금 까다롭습니다. 설치된 dev package 들을 pkg-config 찾는 문법이 조금 이해가 되지않을 수 있어요. 아래는, gtk4 header file 과 library 를 pkg-config 로 찾아서 gcc 로 빌드하는 Makefile 의 예제입니다.

CFLAGS=-g -Wall -Wextra $$(pkg-config --cflags gtk4)
GTK_LIBS = $(shell pkg-config gtk4 --libs)

#$(error $(GTK_CFLAGS))

all: key_file

key_file: g_key_file_example.o
	gcc -o g_key_file_example.exe g_key_file_example.o $(GTK_LIBS)

key_file.o: g_key_file_example.c
	gcc -c g_key_file_example.c -o g_key_file_example.o

clean:
	rm -rf *o
	rm -rf *exe

 

코딩하기

아래와 같이 설정파일을 읽는 코드를 작성합니다.

#include <gtk/gtk.h>

int main(void)
{
  GKeyFile *key_file;
  GError *error = NULL;
  
  gchar *str_val;
  gint int_val;
  
  key_file = g_key_file_new();
  
  if(g_key_file_load_from_file(key_file, "config.ini", G_KEY_FILE_NONE, &error))
  {
    str_val = g_key_file_get_string(key_file, "group1", "str_value", &error);
    int_val = g_key_file_get_integer(key_file, "group1", "int_value", &error);

    g_print("\nstr_value : %s, int_value: %d\n", str_val, int_val);
  }
  else
  {
    g_error("\nkey file read error : %s", error->message);
  }

  return 0;
}
  1. GKeyFile 은 설정 key file 읽기 위한 데이터 구조체 입니다. GKeyFile 구조체를 사용하기 위해서 선언하고 생성 합니다.
  2. g_key_file_load_from_file 함수로 설정 파일을 열고, g_key_file_get_XXX 함수로 parse 합니다.

실행결과

$ ./g_key_file_example.exe

str_value : Hello, int_value: 4321

참고자료

GLib 의 KeyFile 구조체와 관련 함수를 참고 합니다.

https://docs.gtk.org/glib/struct.KeyFile.html

 

GLib.KeyFile

Reference for GLib.KeyFile

docs.gtk.org

반응형