XCB
XCB![]() | |
원저작자 | 바트 매시 |
---|---|
개발자 | 제이미 샤프, 조쉬 트리플렛, 바트 매시 |
초기 릴리즈 | 전( |
안정된 릴리스 | 1.14 / 2020년 2월, 전( |
저장소 | |
기입처 | C |
운영 체제 | POSIX |
유형 | X11 클라이언트 라이브러리 |
면허증. | MIT 라이선스 |
웹 사이트 | xcb |


XCB(X protocol C-language Binding)는 X11 디스플레이 서버 프로토콜의 클라이언트 측을 구현하는 라이브러리입니다.XCB는 C 프로그래밍 언어로 작성되어 MIT 라이선스에 따라 배포됩니다.이 프로젝트는 2001년 Bart Massey에 의해 시작되었으며 Xlib을 대체하는 것을 목표로 하고 있다.
개요
XCB는 Xlib를 대체하는 소형 현대화된 제품으로 설계되었습니다.Xlib는 [1]X 윈도 시스템과의 통신을 위한 프라이머리 C 라이브러리였습니다.이는 2000년대 초에 실시된 X 구현의 보다 완전한 재검토와 일치합니다.XCB의 주요 목표는 다음과 같습니다.
- 라이브러리의 크기와 복잡성을 줄이다
- X11 프로토콜에 대한 직접 액세스를 제공하다
필요한 크기 감소는 주로 XCB의 범위를 X 프로토콜 처리로 제한하고 응용 프로그램에서 거의 사용되지 않는 광범위한 유틸리티 라이브러리와 같은 Xlib 기능을 생략함으로써 달성됩니다.그 결과 컴파일된 라이브러리 크기가 30배 감소합니다(2004년 [2]기준).두 번째 목표에는 C 인터페이스를 비동기화하고, 더 나은 멀티스레딩을 지원하며, XML 프로토콜 설명을 통해 확장을 구현하기 쉽게 하는 것이 포함됩니다.
코어 및 확장 프로토콜 설명은 XML로 되어 있으며 Python으로 작성된 프로그램이 C 바인딩을 만듭니다.(이전 버전은 XSLT와 M4를 사용했습니다.)
또 다른 목표는 이러한 프로토콜 기술을 사용하여 프로토콜 문서, 더 많은 언어 바인딩 및 서버 측 스텁을 작성하는 것입니다.
Massey와 다른 사람들은 Z [3]표기법을 사용하여 XCB의 주요 부분이 공식적으로 옳다는 것을 증명하기 위해 노력했습니다.(Xlib에는 에러가 포함되어 있는 것으로 알려져 있습니다).[4]
Xlib 호환성
Xlib/XCB는 애플리케이션 바이너리 인터페이스와 Xlib 및 XCB의 호환성을 제공하여 증분 포팅 [5]경로를 제공합니다.Xlib/XCB는 Xlib의 프로토콜 계층을 사용하지만 Xlib 전송 계층을 XCB로 대체하고 XCB를 직접 사용할 수 있도록 기본 XCB 연결에 대한 액세스를 제공합니다.Xlib/XCB를 사용하면 X 디스플레이 서버에 대한 단일 연결을 열고 XCB와 Xlib를 모두 사용할 수 있습니다.아마도 Xlib 또는 [6][7]Xlib용으로 설계된 라이브러리를 혼합하여 사용할 수 있습니다.
예
// 창을 열고 상자를 그릴 수 있는 간단한 XCB 응용 프로그램 // GNU를 사용하여 컴파일하려면 다음을 사용합니다. // gcc x.c -lxcb #실패하다 <stdio.h> #실패하다 <stdlib.h> #실패하다 < xcb / xcb >h> 인트 주된(무효) { xcb_connection_t *c; xcb_screen_t *s; xcb_syslog_t w; xcb_gcontext_t g; xcb_syslog_event_t *e; uint32_t 마스크; uint32_t 가치[2]; 인트 다 했어요. = 0; xcb_syslog_t r = { 20, 20, 60, 60 }; // 서버에 대한 연결 열기 c = xcb_connect(특수한 순서,특수한 순서); 한다면 (xcb_connection_has_error(c)) { 인쇄물("디스플레이를 열 수 없습니다.\n"); 퇴장(EXIT_FAILURE); } // 첫 화면 가져오기 s = xcb_syslog_roots_iterator( xcb_get_module(c) ).데이터.; // 검은색 그래픽 컨텍스트 생성 g = xcb_generate_id(c); w = s->뿌리; 마스크 = XCB_GC_포그라운드 XCB_GC_GRAPHICS_EXPROXOVES; 가치[0] = s->블랙_블랙; 가치[1] = 0; xcb_create_module(c, g, w, 마스크, 가치); // 창 생성 w = xcb_generate_id(c); 마스크 = XCB_CW_BACK_PIX XCB_CW_EVENT_MASK; 가치[0] = s->흰색_고정; 가치[1] = XCB_EVENT_MASK_Exposure XCB_EVENT_MASK_KEY_PRESS; xcb_create_module(c, s->root_depth(깊이), w, s->뿌리, 10, 10, 100, 100, 1, XCB_WINDOW_CLASS_INPUT_OUTPUT, s->루트 비주얼, 마스크, 가치); // 창을 매핑(표시)합니다. xcb_map_syslog(c, w); xcb_module(c); // 이벤트 루프 하는 동안에 (!다 했어요. & & (e = xcb_wait_for_event(c))) { 전환하다 (e->response_type & ~0x80) { 사례. XCB_EXPOSE: // 창을 그리거나 다시 그립니다. xcb_poly_fill_fil_disples(c, w, g, 1, &r); xcb_module(c); 브레이크.; 사례. XCB_KEY_PRESS: // 키를 누르면 종료됩니다. 다 했어요. = 1; 브레이크.; } 공짜(e); } // 서버 연결 닫기 xcb_절단(c); 퇴장(종료_SUCCESS); }
XCB는 이 [8]예에서 볼 수 있듯이 Xlib와 동등하지만 약간 낮은 수준의 API를 가지고 있습니다.
프로토콜 설명
XCB의 크리에이터는 언어 중립적인 방식으로 X11 프로토콜을 모델링하고 다른 프로그래밍 언어에 대한 바인딩을 쉽게 생성하기 위해 특수 인터페이스 기술 언어를 발명했습니다.libxcb 자체는 코드 생성기 및 작은 C 스터브 유틸리티 함수로 구현됩니다.
예:
<xcb 헤더="빅레크" extension-xname="대규모 요청" extension-name="Big Requests" extension-multiword="진짜" 메이저 버전="0" 마이너 버전="0"> <요청> 이름="활성화" opcode="0"> <blocks> <패드> 바이트="1" /> <필드> 입력="CARD32" 이름="maximum_request_length" /> </filters> </요구> </xcb>
로고
XCB 로고는 웹 만화 Neko the Kitty의 작가인 Gearoid Molloy가 제작하여 프로젝트에 [9]기부하였다.
기타 언어 바인딩
- XCB.pm - XCB로의 바인딩을 구현하는 Perl 모듈.
- xpyb - XCB를 사용하여 X Window 시스템에 대한 Python 바인딩.2013년 6월 현재 Python 3은 지원하지 않습니다.freedesktop.org에서 제공.
- xcffib - Python 2와 3 및 xpyb보다 몇 가지 더 많은 X 확장을 지원하는 또 다른 Python 바인딩입니다.
메모들
- ^ Gettys, James; Packard, Keith (2004). The (Re) Architecture of the X Window System (PDF). Proc. Linux Symposium. Vol. 1.
- ^ Sharp, Jamey (2004). How Xlib is Implemented (And What We're Doing About It) (PDF). Proc. Usenix Annual Techn. Conf., Freenix Track.
- ^ 매시와 바우어, 2002년
- ^ Sharp and Massey, 2002, 22.4. "Xlib은 스레드 애플리케이션을 지원하도록 설계되어 있으며, 그 지원을 사용할 수 없는 것은 아니지만 Xlib 인터페이스를 변경하지 않고서는 제거할 수 없는 레이스 조건이 있습니다."
- ^ Maloney, Ross J. (31 March 2018). Low Level X Window Programming: An Introduction by Examples. Springer. pp. 225–244. ISBN 978-3-319-74250-2. Retrieved 17 May 2022.
- ^ "Xlib/XCB: Xlib with XCB transport". 2008-01-11. Retrieved 2009-09-11.
- ^ Jamey Sharp and Josh Triplett (2006-11-26). "libx11 with Xlib/XCB now in experimental; please test with your packages". debian-devel-announce (Mailing list). Retrieved 2009-09-11.
- ^ Jamey Sharp; Bart Massey (2002), XCL : An Xlib Compatibility Layer For XCB, USENIX 2002 Annual Technical Conference, Freenix Track
- ^ Kitty Logo(xcb.freedesktop.org)
레퍼런스
- Massey, Bart; Sharp, Jamey (2001-09-19). "XCB: An X Protocol C Binding" (PDF). Proceedings of the XFree86 Technical Conference. Oakland, California: USENIX. Retrieved 2012-03-12.
- Massey, Bart; Bauer, Robert (2002). "X Meets Z: Verifying Correctness In The Presence Of POSIX Threads". Proceedings of the FREENIX Track: 2002 USENIX Annual Technical Conference. Monterey, California: USENIX. pp. 221–234. Retrieved 2008-11-07.
- Sharp, Jamey; Massey, Bart (2002). "XCL: A Compatibility Layer For XCB". Proceedings of the FREENIX Track: 2002 USENIX Annual Technical Conference. Monterey, California: USENIX. pp. 71–83. Retrieved 2008-11-07.
외부 링크
- XCB Wiki(freedesktop.org)
- XCB API 레퍼런스, 튜토리얼
- libxcb 튜토리얼
- 기타 출판물
- X 새 개발자 가이드: Xlib 및 XCB