XCB
| ๊ฐ๋ฐ์ | Jamey Sharp, Josh Triplett, Bart Massey |
|---|---|
| ๋ฐํ์ผ | 2001๋ |
| ์์ ํ ๋ฒ์ | |
| ์ ์ฅ์ | |
| ์ด์ ์ฒด์ | POSIX |
| ์ข ๋ฅ | X ์๋ ์ฝ์ด ํ๋กํ ์ฝ ๊ฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| ๋ผ์ด์ ์ค | MIT |
| ์น์ฌ์ดํธ | 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 ๊ตฌํ์ ์ํด[์ถ์ฒ ํ์] Xlib/XCB๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ทธ ๊น๋ญ์ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํตํด ์์ฉ ํ๋ก๊ทธ๋จ์ด X ์๋ฒ๋ก์ ์ฐ๊ฒฐ์ ๊ฐ์ํ์ฌ XCB์ Xlib๋ฅผ ๋ ๋ค ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.[2][3]
๋ชฉ์
[ํธ์ง]XCB์ ์ฃผ ๋ชฉ์ ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๊ธฐ์ ๋ณต์ก์ฑ์ ์ค์ด๊ธฐ ์ํด
- X11 ํ๋กํ ์ฝ๋ก์ ์ง์ ์ ๊ทผ์ ์ ๊ณตํ๊ธฐ ์ํด
์
[ํธ์ง]/* ์ฐฝ ์์ ์์๋ฅผ ๊ทธ๋ ค๋ด๋ ๋จ์ XCB ์์ฉ ํ๋ก๊ทธ๋จ์
๋๋ค */
/* ์ปดํ์ผํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ์ธ์:
gcc -Wall x.c -lxcb
*/
#include <xcb/xcb.h>
#include <stdio.h>
#include <stdlib.h>
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๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
ํ๋กํ ์ฝ ์ ์
[ํธ์ง]XCB ์ ์์๋ค์ ์ ๋ฌธํ๋ ์ธํฐํ์ด์ค ์ ์ ์ธ์ด๋ฅผ ๋ง๋ค์ด์ ์ธ์ด ์ค๋ฆฝ์ ์ธ ๋ฐฉ์์ผ๋ก X11 ํ๋กํ ์ฝ์ ๋ชจ๋ธ๋งํ๊ณ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค๊ณผ์ ๋ฐ์ธ๋ฉ์ ์ฝ๊ฒ ํ ์ ์๊ฒ ํ์๋ค. libxcb ๊ทธ ์์ฒด๋ ์ฝ๋ ๋ฐ์๊ธฐ๋ก์ ๊ตฌํ๋์ด ์๋ค.
์:
<xcb header="bigreq" extension-xname="BIG-REQUESTS"
extension-name="BigRequests" extension-multiword="true"
major-version="0" minor-version="0">
<request name="Enable" opcode="0">
<reply>
<pad bytes="1" />
<field type="CARD32" name="maximum_request_length" />
</reply>
</request>
</xcb>
๋ก๊ณ
[ํธ์ง]XCB ๋ก๊ณ ๋ Neko the Kitty ์นํฐ ์๊ฐ Gearรณid Molloy๊ฐ ๋ง๋ค์ด ํ๋ก์ ํธ์ ๊ธฐ๋ถํ ๊ฒ์ด๋ค.[4]
๊ธฐํ ์ธ์ด ๋ฐ์ธ๋ฉ
[ํธ์ง]- xpyb - XCB๋ฅผ ์ด์ฉํ X ์๋ ์์คํ ์ผ๋ก์ ํ์ด์ฌ ๋ฐ์ธ๋ฉ. 2013๋ 6์ ๊ธฐ์ค์ผ๋ก python3๋ฅผ ์ง์ํ์ง ์๋๋ค. freedesktop.org ์ ๊ณต.
์ฐธ์กฐ
[ํธ์ง]- โ โlibxcb-1.17.0โ.
- โ โXlib/XCB: Xlib with XCB transportโ. 2008๋ 1์ 11์ผ. 2009๋ 9์ 11์ผ์ ํ์ธํจ.
- โ Jamey Sharp and Josh Triplett (2006๋ 11์ 26์ผ). โlibx11 with Xlib/XCB now in experimental; please test with your packagesโ (๋ฉ์ผ๋ง ๋ฆฌ์คํธ). ใdebian-devel-announceใ. 2009๋ 9์ 11์ผ์ ํ์ธํจ.
- โ KittyLogo (xcb.freedesktop.org)
์ฐธ๊ณ ๋ฌธํ
[ํธ์ง]- Massey, Bart; Sharp, Jamey (2001๋ 9์ 19์ผ). ใXCB: An X Protocol C Bindingใ (PDF). ใProceedings of the XFree86 Technical Conferenceใ. Oakland, California: USENIX. 2012๋ 3์ 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. 221โ234์ชฝ. 2008๋ 11์ 7์ผ์ ํ์ธํจ.
- Sharp, Jamey; Massey, Bart (2002). ใXCL: A Compatibility Layer For XCBใ. ใProceedings of the FREENIX Track: 2002 USENIX Annual Technical Conferenceใ. Monterey, California: USENIX. 71โ83์ชฝ. 2008๋ 11์ 7์ผ์ ํ์ธํจ.
์ธ๋ถ ๋งํฌ
[ํธ์ง]
์ํค๋ฏธ๋์ด ๊ณต์ฉ์ XCB ๊ด๋ จ ๋ฏธ๋์ด ๋ถ๋ฅ๊ฐ ์์ต๋๋ค.- (์์ด) XCB ์ํค (freedesktop.org)
- (์์ด) XCB API ์ฐธ์กฐ - ๊ฐ์ข
- (์์ด) libxcb ๊ฐ์ข
- (์์ด) ์ถํ๋ฌผ