GTK 서버
GTK-server원저작자 | 피터 판 에르텐 |
---|---|
개발자 | 피터 판 에르텐 |
초기 릴리즈 | 전( |
안정된 릴리스 | 2.4.5 / 2019년 6월 , 전( |
운영 체제 | 크로스 플랫폼 |
면허증. | GNU 일반 공중 라이선스 |
웹 사이트 | www |
GTK-server는 GNU General Public License에 따라 출시된 오픈소스 프로젝트입니다.GTK-server 프로젝트는 GIMP Tool Kit(GTK) 또는 XForms를 사용하여 그래픽 사용자 인터페이스 프로그래밍을 모든 통역 언어로 제공하는 것을 목표로 합니다.
철학
GTK 서버는 GTK에 스트림 지향 인터페이스를 제공합니다.GTK 서버가 스탠드아론 바이너리로 컴파일 되어 있는 경우 stdin, fifo(이름 있는 파이프), ipc(메시지 큐), tcp 또는 udp의 5가지 인터페이스를 사용할 수 있습니다.I/O 기능을 갖춘 인터프리터 언어 또는 셸 스크립트는 인터페이스 유형을 지정하는 인수를 사용하여 GTK 서버를 시작하고 S-Expression 형식으로 GTK 함수 호출을 전송할 수 있습니다.각 요구 후 GTK 서버는 호출된 GTK 함수의 유형에 따라 결과를 반환합니다.
GTK-server가 공유 객체로 컴파일되면 클라이언트 프로그램에서 먼저 Import해야 하는 함수 'gtk'를 내보냅니다.그 후 클라이언트 프로그램은 가져온 'gtk' 함수에 대한 인수로서 S-Expression 형식의 GTK 함수 호출을 시작할 수 있습니다.
GTK 서버가 실제로 GTK 기능을 실행하기 전에 GTK 기능의 프로토타입을 설명하는 구성 파일을 읽어야 합니다.버전 2.2.3 이후는, 이 조작도 온 더 플라이로 실행할 수 있기 때문에, GTK 서버를 설정 파일 없이 실행할 수 있습니다.
실행
GTK 서버를 실장할 때는, 다음의 고려사항이 있습니다.
- 외부 함수에 액세스하는 것은 접근한 라이브러리가 C 또는 Pascal과 같은 객체 지향 프로그래밍 언어가 아닌 경우에만 가능합니다.예를 들어 C++로 작성된 라이브러리는 오버로드된 함수를 통합하기 위해 이름 망글링을 사용합니다.즉, 공유 라이브러리가 컴파일되면 C++ 라이브러리의 실제 함수 이름을 알 수 없습니다.따라서 이러한 라이브러리의 기능에 액세스할 수 없습니다.따라서 C++로 프로그램된 wxWidgets, Qt toolkit, FLTK 등의 라이브러리는 GTK 서버 [1]개념으로는 액세스할 수 없습니다.
- GTK 라이브러리는 C 프로그래밍 언어로 구현되었습니다.C는 강력한 유형의 프로그래밍 언어이기 때문에 인터프리터된 프로그램은 실행 시 각 GTK 함수의 인수 유형과 반환값 유형을 알아야 합니다.이것들은 온 더 플라이 또는 컨피규레이션파일로 정의할 수 있습니다.이 파일은 부팅 시 GTK 서버에 의해 해석됩니다.단, GTK 서버는 인터프리터 클라이언트프로그램에 의해 사용되는 실제 함수를 인식하고 있지 않기 때문에 GTK 서버에서는 각 GTK 함수의 인수와 반환값은 모두 가변형입니다.
GTK 함수와 대응하는 인수 및 반환값을 GTK 서버 바이너리에 하드 코딩할 수 없기 때문에 구현에 문제가 발생합니다.
이 문제를 해결하려면 외부 기능 인터페이스를 사용합니다.현재 GTK 서버에서는 libffi, FFCALL,[2] C/Invoke[3] 및 dyncall의 [4]4개의 외부 기능 인터페이스가 지원됩니다.GTK 서버를 정상적으로 컴파일 하려면 , 이러한 라이브러리 중 하나를 타겟 시스템에서 사용할 수 있어야 합니다.
예
다음 KornShell 스크립트는 GTK 서버를 stdin 모드로 시작하고 종료 버튼을 사용하여 간단한 창을 만듭니다.
#!/bin/ksh#시작 GTK-server gtk-server -stdin&#GTK-server과 기능 기능 gtk{인쇄 -p달러 1;GTK -p을 읽고}기능'을 정의하{2달러"3달러";eval달러 1="달러 GTK".}#설정 GUIgtk"gtk_init NULL NULL"을 정의하 WINDOWgtk"gtk_window_new 0"gtk"gtk_window_set_title달러 WINDOW'Korn GTK-server 데모의"gtk"gtk_window_set_defau를 부여하면 통신한다.lt_size $WINDOW 400 200" define TABLE gtk "gtk_table_new 10 1" gtk "gtk_button_new_with_label 'Click to Quit' gtk " gtk_table_to_label" gthl $TABUTTABUTTON 5 5 5 5 5 gtk"llback wait" 완료 # 종료 GTK-server gtk "gtk_server_exit"
장점과 제한
GTK는 원래 C 프로그래밍 언어로 사용되어야 했지만, 현재는 인터프리터의 실제 구현을 변경하지 않고 모든 인터프리터 언어에서 GTK를 사용할 수 있습니다.또한 GTK 1.x, GTK2.x 및 GTK 3.x에 연결할 수 있습니다.옵션으로 OpenGL 관련 라이브러리, Popler, Mozilla와 같은 다른 공유 라이브러리를 사용할 수 있지만 libc, sqlite 및 MikMod와 같은 음악 라이브러리도 사용할 수 있습니다.
GTK 서버를 스탠드아론 바이너리로 사용할 경우 프로세스 목록에 추가 프로세스가 생성될 수밖에 없습니다.또한 매크로로 정의된 GTK 함수는 클라이언트 프로그램에서 액세스할 수 없습니다.
레퍼런스
- ^ Isotton, Aaron (2006-03-16), "C++ dlopen mini HOWTO", The Linux Documentation Project, archived from the original on 2021-08-12, retrieved 2021-09-07
- ^ FFCALL Libraries, archived from the original on 2021-07-01, retrieved 2021-09-07
- ^ C/Invoke, archived from the original on 2021-08-20, retrieved 2021-09-07
- ^ dyncall.org - calling C functions dynamically, archived from the original on 2021-04-16, retrieved 2021-09-07