XCB - XCB

XCB
Xcb logo.svg
Оригинальный автор (ы)Барт Мэсси
Разработчики)Джейми Шарп, Джош Триплетт, Барт Мэсси
изначальный выпуск2001; 19 лет назад (2001)
Стабильный выпуск
1.14 / февраль 2020; 10 месяцев назад (2020-02)
Репозиторий Отредактируйте это в Викиданных
Написано вC
Операционная системаPOSIX
ТипКлиентская библиотека X11
ЛицензияЛицензия MIT
Интернет сайтxcb.freedesktop.org
X11-клиенты используют XCB для связи с X сервер.
Более полное представление о Linux стек графики
Программы часто используют GTK или же ФЛТК или же Qt для них Виджеты GUI.
Более полное представление о компонентах операционной системы для домашних компьютеров.

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.

Примечания

  1. ^ Геттис, Джеймс; Паккард, Кейт (2004). (Ре) Архитектура системы X Window (PDF). Proc. Симпозиум по Linux. 1.
  2. ^ Шарп, Джейми (2004). Как реализован Xlib (и что мы с этим делаем) (PDF). Proc. Usenix Annual Techn. Конф., Freenix Track.
  3. ^ Мэсси и Бауэр, 2002 г..
  4. ^ Шарп и Мэсси, 2002, §2.4. «Хотя Xlib был разработан для поддержки многопоточных приложений, и хотя эта поддержка не является непригодной для использования, существуют известные состояния гонки, которые нельзя устранить без изменения интерфейса Xlib».
  5. ^ «Xlib / XCB: Xlib с транспортом XCB». 2008-01-11. Получено 2009-09-11.
  6. ^ Джейми Шарп и Джош Триплетт (26 ноября 2006 г.). "libx11 с Xlib / XCB сейчас в экспериментальном режиме; пожалуйста, проверьте свои пакеты". дебиан-девел-анонс (Список рассылки). Получено 2009-09-11.
  7. ^ Джейми Шарп; Барт Мэсси (2002), XCL: уровень совместимости с Xlib для XCB, Ежегодная техническая конференция USENIX 2002, Freenix Track
  8. ^ KittyLogo (xcb.freedesktop.org)

Рекомендации

внешняя ссылка