XCB - XCB
Эта статья слишком полагается на Рекомендации к основные источники.Ноябрь 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Оригинальный автор (ы) | Барт Мэсси |
---|---|
Разработчики) | Джейми Шарп, Джош Триплетт, Барт Мэсси |
изначальный выпуск | 2001 |
Стабильный выпуск | 1.14 / февраль 2020 |
Репозиторий | |
Написано в | C |
Операционная система | POSIX |
Тип | Клиентская библиотека X11 |
Лицензия | Лицензия MIT |
Интернет сайт | xcb |
XCB (Протокол X Связывание с языком C) это библиотека реализация клиентской части X11 отображать протокол сервера. XCB записан в Язык программирования C и распространяется под Лицензия MIT. Проект был начат в 2001 году Барт Мэсси и призван заменить Xlib.
Обзор
XCB был разработан как небольшая модернизированная замена Xlib, ранее основной библиотеки C для связи с оконной системой X, что совпало с более полным пересмотром реализации X, который произошел в начале 2000-х годов.[1] Основные цели XCB:
- уменьшить размер и сложность библиотеки
- обеспечить прямой доступ к X11 протокол
Требуемое уменьшение размера достигается в первую очередь за счет ограничения области действия XCB обработкой протокола X и исключения функций Xlib, таких как его обширная служебная библиотека, большая часть из которых мало используется приложениями. Это приводит к уменьшению размера скомпилированной библиотеки в тридцать раз (по состоянию на 2004 г.).[2]Вторичные цели включают создание интерфейса C асинхронный, облегчая лучше многопоточность и упрощая реализацию расширений (через XML описания протокола).
Описания основных и дополнительных протоколов приведены в XML, с программой, написанной на Python создание привязок C. (Использовались предыдущие версии XSLT и M4.)
Еще одна цель - иметь возможность использовать эти описания протокола для создания документации протокола, дополнительных языковых привязок и заглушек на стороне сервера.
Мэсси и другие работали, чтобы доказать, что ключевые части XCB формально правильный с помощью Обозначение Z.[3] (Уже давно известно, что Xlib содержит ошибки.[4])
Совместимость с Xlib
Xlib / XCB обеспечивает двоичный интерфейс приложения совместимость как с Xlib, так и с XCB, обеспечивая инкрементный путь переноса. Xlib / XCB использует уровень протокола Xlib, но заменяет транспортный уровень Xlib на XCB и обеспечивает доступ к базовому соединению XCB для прямого использования XCB. Xlib / XCB позволяет приложению открывать одно соединение с X сервер отображения и использовать как XCB, так и Xlib, возможно, с помощью смеси библиотек, предназначенных для одного или другого.[5][6]
Пример
// Простое приложение XCB для открытия окна и рисования в нем прямоугольника// Чтобы скомпилировать его с использованием GNU, используйте:// gcc x.c -lxcb#включают <stdio.h>#включают <stdlib.h>#включают <xcb/xcb.h>int основной(пустота){ xcb_connection_t *c; xcb_screen_t *s; xcb_window_t ш; xcb_gcontext_t грамм; xcb_generic_event_t *е; uint32_t маска; uint32_t значения[2]; int сделано = 0; xcb_rectangle_t р = { 20, 20, 60, 60 }; // открываем соединение с сервером c = xcb_connect(НОЛЬ,НОЛЬ); если (xcb_connection_has_error(c)) { printf("Невозможно открыть дисплей п"); выход(EXIT_FAILURE); } // получаем первый экран s = xcb_setup_roots_iterator( xcb_get_setup(c) ).данные; // создаем черный графический контекст грамм = xcb_generate_id(c); ш = s->корень; маска = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; значения[0] = s->black_pixel; значения[1] = 0; xcb_create_gc(c, грамм, ш, маска, значения); // создаем окно ш = xcb_generate_id(c); маска = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK; значения[0] = s->white_pixel; значения[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS; xcb_create_window(c, s->root_depth, ш, s->корень, 10, 10, 100, 100, 1, XCB_WINDOW_CLASS_INPUT_OUTPUT, s->root_visual, маска, значения); // отображаем (показываем) окно xcb_map_window(c, ш); xcb_flush(c); // цикл событий пока (!сделано && (е = xcb_wait_for_event(c))) { выключатель (е->response_type & ~0x80) { кейс XCB_EXPOSE: // рисуем или перерисовываем окно xcb_poly_fill_rectangle(c, ш, грамм, 1, &р); xcb_flush(c); перемена; кейс XCB_KEY_PRESS: // выход при нажатии клавиши сделано = 1; перемена; } свободный(е); } // закрываем соединение с сервером xcb_disconnect(c); выход(EXIT_SUCCESS);}
XCB имеет сопоставимый, но немного более низкий уровень API, чем Xlib,[7] как можно увидеть на этом примере.
Описание протокола
Создатели XCB изобрели специализированный язык описания интерфейса для моделирования протокола X11 независящим от языка способом и облегчения создания привязок к другим языкам программирования. Сама библиотека libxcb реализована как генератор кода и крошечная заглушка служебных функций на языке Си.
Пример:
заголовок ="бигрек" расширение-xname =«БОЛЬШИЕ ЗАПРОСЫ» расширение-имя =«BigRequests» extension-multiword ="истинный" основная версия ="0" второстепенная версия ="0"> <запрос имя ="Давать возможность" код операции ="0"> <reply> <блокнот байты ="1" /> <поле type =«CARD32» имя ="максимальная_длина_запроса" /> </reply> </request></xcb>
Логотип
Логотип XCB был разработан Героидом Моллоем, автором веб-комикс Неко Китти, и пожертвовал проекту.[8]
Привязки других языков
- XCB.pm - Модуль Perl, реализующий привязку к XCB.
- xpyb - Привязка Python к системе X Window с использованием XCB. По состоянию на июнь 2013 года он не поддерживает Python 3. Предоставлено freedesktop.org.
- xcffib - Еще одна привязка Python, которая поддерживает Python 2 и 3, а также еще несколько расширений X, чем xpyb.
Примечания
- ^ Геттис, Джеймс; Паккард, Кейт (2004). (Ре) Архитектура системы X Window (PDF). Proc. Симпозиум по Linux. 1.
- ^ Шарп, Джейми (2004). Как реализован Xlib (и что мы с этим делаем) (PDF). Proc. Usenix Annual Techn. Конф., Freenix Track.
- ^ Мэсси и Бауэр, 2002 г..
- ^ Шарп и Мэсси, 2002, §2.4. «Хотя Xlib был разработан для поддержки многопоточных приложений, и хотя эта поддержка не является непригодной для использования, существуют известные состояния гонки, которые нельзя устранить без изменения интерфейса Xlib».
- ^ «Xlib / XCB: Xlib с транспортом XCB». 2008-01-11. Получено 2009-09-11.
- ^ Джейми Шарп и Джош Триплетт (26 ноября 2006 г.). "libx11 с Xlib / XCB сейчас в экспериментальном режиме; пожалуйста, проверьте свои пакеты". дебиан-девел-анонс (Список рассылки). Получено 2009-09-11.
- ^ Джейми Шарп; Барт Мэсси (2002), XCL: уровень совместимости с Xlib для XCB, Ежегодная техническая конференция USENIX 2002, Freenix Track
- ^ KittyLogo (xcb.freedesktop.org)
Рекомендации
- Мэсси, Барт; Шарп, Джейми (2001-09-19). «XCB: привязка X протокола C» (PDF). Материалы технической конференции XFree86. Окленд, Калифорния: USENIX. Получено 2012-03-12.
- Мэсси, Барт; Бауэр, Роберт (2002). «X встречает Z: проверка корректности при наличии потоков POSIX». Труды FREENIX Track: Ежегодная техническая конференция USENIX 2002 г.. Монтерей, Калифорния: USENIX. стр. 221–234. Получено 2008-11-07.
- Шарп, Джейми; Мэсси, Барт (2002). «XCL: уровень совместимости для XCB». Труды FREENIX Track: Ежегодная техническая конференция USENIX 2002 г.. Монтерей, Калифорния: USENIX. стр. 71–83. Получено 2008-11-07.