맨위로가기

XCB

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

XCB는 X 윈도 시스템과 통신하기 위해 설계된 C 라이브러리이며, 기존 Xlib를 대체하기 위해 개발되었다. 라이브러리 크기와 복잡성을 줄이고, X11 프로토콜에 직접 접근하는 것을 목표로 한다. XCB는 XML로 작성된 프로토콜 설명을 사용하여 다양한 언어 바인딩과 프로토콜 문서를 생성하며, Xlib와의 호환성을 제공하여 점진적인 이식을 지원한다.

더 읽어볼만한 페이지

  • X 라이브러리 - Xlib
    Xlib는 X 윈도우 시스템의 클라이언트 측 라이브러리로, C 언어로 작성되어 X 프로토콜을 직접 구현하며 창 생성, 그래픽 처리, 사용자 입력 관리 등 클라이언트 프로그램이 X 서버와 통신하는 데 필요한 기본적인 함수들을 제공한다.
  • X 라이브러리 - FLTK
  • Freedesktop.org - D-Bus
    D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다.
  • Freedesktop.org - 메사 (컴퓨터 그래픽스)
    메사는 다양한 운영체제에서 3D 그래픽 하드웨어 가속을 지원하는 자유-오픈 소스 그래픽 라이브러리로, OpenGL, Vulkan, OpenCL 등 다양한 그래픽 API를 지원하며 소프트웨어 렌더링 기능도 제공한다.
  • X 윈도 시스템 - 데스크톱 환경
    데스크톱 환경은 아이콘, 창, 메뉴 등으로 컴퓨터 화면을 책상처럼 보이게 하는 시각적 인터페이스로, 창 관리자, 파일 관리자 등으로 구성되어 파일 관리 및 프로그램 실행을 지원하며, 다양한 종류가 존재하여 사용자가 선택할 수 있다.
  • X 윈도 시스템 - 오픈 그룹
    오픈 그룹은 다양한 기술 공급업체, 구매자, 정부 기관을 포함하는 국제 컨소시엄으로, 표준 개발, 인증 프로그램 운영, TOGAF와 같은 IT 아키텍처 프레임워크 제공 및 UNIX 상표 권리 보유를 통해 개방형 IT 표준 개발 및 보급에 기여한다.
XCB - [IT 관련 정보]에 관한 문서
기본 정보
XCB 로고
장르X 윈도 시스템 코어 프로토콜 클라이언트 라이브러리
개발
개발자Jamey Sharp, Josh Triplett, Bart Massey
작성자Bart Massey
프로그래밍 언어C
릴리스
최초 릴리스2001년
최신 버전1.14
최신 릴리스 날짜2020년
기타
운영 체제POSIX
라이선스MIT
웹사이트XCB 공식 웹사이트

2. 목적

XCB의 주 목적은 다음과 같다:[1]


  • 라이브러리 크기와 복잡성을 줄인다.
  • X11 프로토콜에 직접 접근을 제공한다.


XCB는 X 윈도 시스템과 통신하기 위한 주요 C 라이브러리였던 Xlib를 대체하기 위해 더 작고 현대화된 형태로 설계되었다.[1] XCB의 주요 목표는 라이브러리 크기와 복잡성 감소, X11 프로토콜에 대한 직접적인 접근 제공이다. 필요한 크기 감소는 주로 XCB의 범위를 X 프로토콜 처리에 국한하고, 응용 프로그램에서 거의 사용되지 않는 광범위한 유틸리티 라이브러리와 같은 Xlib 기능을 생략함으로써 달성되었다. 이로 인해 컴파일된 라이브러리 크기가 30배 감소했다(2004년 기준).[2]

부차적인 목표로는 C 인터페이스를 비동기식으로 만들어, 더 나은 멀티스레딩을 용이하게 하고, 확장을 더 쉽게 구현하는 것( XML 프로토콜 설명을 통해) 등이 있다.[1]

코어 및 확장 프로토콜 설명은 XML로 작성되었으며, 파이썬으로 작성된 프로그램이 C 바인딩을 생성한다. (이전 버전에서는 XSLT 및 M4를 사용했다.)[1]

추가적인 목표는 이러한 프로토콜 설명을 사용하여 프로토콜 문서, 더 많은 언어 바인딩 및 서버 측 스텁을 생성하는 것이다.[1]

Massey 등은 Z 표기법을 사용하여 XCB의 핵심 부분을 형식적으로 올바른지 증명하기 위해 노력했다.[3] (Xlib는 오랫동안 오류가 있는 것으로 알려져 있다.[4])

3. 프로토콜 정의

XCB 제작자들은 X11 프로토콜을 언어 중립적인 방식으로 기술하고, 다른 프로그래밍 언어와의 바인딩 생성을 쉽게 하기 위해 특화된 인터페이스 정의 언어를 만들었다.[1] libxcb 자체는 코드 생성기와 작은 C 언어 유틸리티 함수로 구성된다.[1]

XCB의 코어 및 확장 프로토콜은 XML로 작성되었으며,[1] 파이썬으로 작성된 프로그램이 C 바인딩을 생성한다.[1] (이전 버전에서는 XSLT 및 M4를 사용했다.)[1]

이러한 프로토콜 설명을 활용하여 프로토콜 문서, 더 많은 언어 바인딩, 서버 측 스텁을 생성할 수 있다.[1]

3. 1. 프로토콜 정의 예시










4. 예제

c

/* 창 안에 상자를 그려내는 단순 XCB 응용 프로그램입니다 */

/* 컴파일하려면 다음을 사용하세요:

gcc -Wall x.c -lxcb


  • /

#include

#include

#include

int main(void) {

xcb_connection_t *c;

xcb_screen_t *s;

xcb_window_t w;

xcb_gcontext_t g;

xcb_generic_event_t *e;

uint32_t mask;

uint32_t values[2];

int done = 0;

xcb_rectangle_t r = { 20, 20, 60, 60 };

/* 서버 연결 개시 */

c = xcb_connect(NULL,NULL);

if (xcb_connection_has_error(c)) {

printf("display를 열 수 없습니다\n");

exit(1);

}

/* 최초의 화면 가져오기 */

s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data;

/* 검은 그래픽 환경 만들기 */

g = xcb_generate_id(c);

w = s->root;

mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;

values[0] = s->black_pixel;

values[1] = 0;

xcb_create_gc(c, g, w, mask, values);

/* 창 만들기 */

w = xcb_generate_id(c);

mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;

values[0] = s->white_pixel;

values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS;

xcb_create_window(c, s->root_depth, w, s->root,

10, 10, 100, 100, 1,

XCB_WINDOW_CLASS_INPUT_OUTPUT, s->root_visual,

mask, values);

/* 창 보이기 */

xcb_map_window(c, w);

xcb_flush(c);

/* 이벤트 루프 */

while (!done && (e = xcb_wait_for_event(c))) {

switch (e->response_type & ~0x80) {

case XCB_EXPOSE: /* 창을 (다시) 그리기 */

xcb_poly_fill_rectangle(c, w, g, 1, &r);

xcb_flush(c);

break;

case XCB_KEY_PRESS: /* 키가 눌릴 때 끝내기 */

done = 1;

break;

}

free(e);

}

/* 서버 연결 닫기 */

xcb_disconnect(c);

return 0;

}

```

이 예제에서 볼 수 있듯이 XCB는 Xlib와 동등하지만 그 보다 살짝 낮은 수준의 API를 가지고 있다.[9] C 언어의 비트 연산 a->response_type & ~0x80은 이벤트가 어디에서 왔는지 나타내는 비트를 제거한다.[8]

5. 기타 언어 바인딩

6. Xlib 호환성

XCB는 Xlib와 거의 동일하지만, API의 추상화 수준은 약간 낮다.[5] ''Xlib/XCB''는 Xlib와 XCB 모두와 응용 프로그램 이진 인터페이스 호환성을 제공하여 점진적인 이식 경로를 제공한다.[5] Xlib/XCB는 Xlib의 프로토콜 계층을 사용하지만 Xlib 전송 계층을 XCB로 대체하고 XCB를 직접 사용하기 위해 기본 XCB 연결에 대한 접근을 제공한다. Xlib/XCB를 사용하면 응용 프로그램이 X 디스플레이 서버에 단일 연결을 열고 XCB와 Xlib를 모두 사용할 수 있으며, 아마도 이들 중 하나를 위해 설계된 라이브러리의 혼합을 통해 가능할 것이다.[6][7]

7. 로고

XCB 로고는 웹툰 ''네코 더 키티''(Neko the Kitty)의 작가인 기라드 몰로이(Gearóid Molloy)가 제작하여 프로젝트에 기증했다.[10]

참조

[1] 간행물 The (Re) Architecture of the X Window System https://keithp.com/~[...]
[2] 간행물 How Xlib is Implemented (And What We're Doing About It) http://www.freedeskt[...]
[3] 문서 Massey and Bauer, 2002
[4] 문서 Sharp and Massey, 2002
[5] 서적 Low Level X Window Programming: An Introduction by Examples https://books.google[...] Springer 2018-03-31
[6] 웹사이트 Xlib/XCB: Xlib with XCB transport http://xcb.freedeskt[...] 2008-01-11
[7] 메일링리스트 libx11 with Xlib/XCB now in experimental; please test with your packages http://lists.debian.[...] 2006-11-26
[8] 웹사이트 X Window System Protocol https://www.x.org/re[...] 2024-03-22
[9] citation XCL : An Xlib Compatibility Layer For XCB https://www.usenix.o[...] USENIX 2002 Annual Technical Conference, Freenix Track
[10] 웹사이트 KittyLogo http://xcb.freedeskt[...]
[11] 웹사이트 [Xcb][ANNOUNCE] libxcb 1.13 https://lists.freede[...] 2018-03-05
[12] 웹인용 Xlib/XCB: Xlib with XCB transport http://xcb.freedeskt[...] 2008-01-11
[13] 메일링리스트 libx11 with Xlib/XCB now in experimental; please test with your packages http://lists.debian.[...] 2006-11-26
[14] 웹사이트 KittyLogo http://xcb.freedeskt[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com