XCB

Xlib와 XCB, 그리고 이들을 사용하는 라이브러리들
XCB(X protocol C-language Binding)는 컴퓨팅에서 X 윈도 시스템을 위한 C 언어 결합이다. 자유 소프트웨어로 구현되어 있으며 Xlib을 대체하는 것을 목적으로 한다. 이 프로젝트는 2001년 Bart Massey가 시작하였다.
Xlib/XCB는 점진적인 이식 경로를 통해 Xlib와 XCB에 대한 응용 프로그램 이진 인터페이스 호환성을 제공한다. Xlib/XCB는 Xlib 프로토콜 계층을 사용하지만 Xlib 전송 계층을 XCB로 대체하며 XCB를 직접 이용할 수 있도록 기반 XCB 연결로의 접근을 제공한다. 대부분의 운영 체제는 X11 구현을 위해날짜=2013-7-27 Xlib/XCB를 사용하는데, 그 까닭은 여러 라이브러리들을 통해 응용 프로그램이 X 서버로의 연결을 개시하여 XCB와 Xlib를 둘 다 사용할 수 있기 때문이다.

**목적**
XCB의 주 목적은 다음과 같다:- 라이브러리 크기와 복잡성을 줄이기 위해- X11 프로토콜로의 직접 접근을 제공하기 위해

**예**
/* 창 안에 상자를 그려내는 단순 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             values2;
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;
values0 = s->black_pixel;
values1 = 0;
xcb_create_gc(c, g, w, mask, values);
/* 창 만들기 */
w = xcb_generate_id(c);
mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
values0 = s->white_pixel;
values1 = 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를 가지고 있다.

**프로토콜 정의**
XCB 제작자들은 전문화된 인터페이스 정의 언어를 만들어서 언어 중립적인 방식으로 X11 프로토콜을 모델링하고 다른 프로그래밍 언어들과의 바인딩을 쉽게 할 수 있게 하였다. libxcb 그 자체는 코드 발생기로서 구현되어 있다.
예:







**로고**
XCB 로고는 Neko the Kitty 웹툰 작가 Gearóid Molloy가 만들어 프로젝트에 기부한 것이다.

**기타 언어 바인딩**
  xpyb - XCB를 이용한 X 윈도 시스템으로의 파이썬 바인딩. 2013년 6월 기준으로 python3를 지원하지 않는다. freedesktop.org 제공.

**참조**

**참고 문헌**
 콘퍼런스 인용|first=Bart |last=Massey |author2=Sharp, Jamey  
publisher=USENIX |date=2001-09-19 |location=Oakland, California |url=http://static.usenix.org/publications/library/proceedings/als01/full_papers/massey/massey.pdf |format=PDF |accessdate=2012-03-12- 콘퍼런스 인용|first=Bart |last=Massey |author2=Bauer, Robert  
publisher=USENIX |year=2002 |location=Monterey, California |url=http://www.usenix.org/events/usenix02/tech/freenix/full_papers/massey/massey_html/index.html |accessdate=2008-11-07|ref=refMasseyBauer2002- 콘퍼런스 인용|first=Jamey |last=Sharp |author2=Massey, Bart  
publisher=USENIX |year=2002 |location=Monterey, California |url=http://www.usenix.org/events/usenix02/tech/freenix/full_papers/sharp/sharp_html/index.html |accessdate=2008-11-07|ref=refSharpMassey2002

**외부 링크**
 en  XCB 위키 (freedesktop.org)- en  XCB API 참조 -  강좌- en  libxcb 강좌- en  출판물
분류:X 라이브러리
분류:X 윈도 시스템
분류:Freedesktop.org
분류:MIT 라이선스 소프트웨어