<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=XCB</id>
	<title>XCB - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=XCB"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=XCB&amp;action=history"/>
	<updated>2026-05-28T11:02:29Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=XCB&amp;diff=1185117&amp;oldid=prev</id>
		<title>imported&gt;MichielN: Wikidata</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=XCB&amp;diff=1185117&amp;oldid=prev"/>
		<updated>2024-03-03T17:21:24Z</updated>

		<summary type="html">&lt;p&gt;Wikidata&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Software&lt;br /&gt;
|Name=XCB&lt;br /&gt;
|Logo=[[Datei:Xcb logo.svg|250px|Logo]]&lt;br /&gt;
|Beschreibung=Logo von XCB&lt;br /&gt;
|Hersteller=Jamey Sharp, Josh Triplett, Bart Massey&lt;br /&gt;
|AktuelleVersion=&lt;br /&gt;
|AktuelleVersionFreigabeDatum=&lt;br /&gt;
|Betriebssystem= [[POSIX]]&lt;br /&gt;
|Programmiersprache = [[C (Programmiersprache)|C]]&lt;br /&gt;
|Kategorie= [[X-Window]] Kernprotokoll Entwicklerbibliothek&lt;br /&gt;
|Lizenz= [[MIT-Lizenz|MIT]]&lt;br /&gt;
|Deutsch=nein&lt;br /&gt;
|Website=[http://xcb.freedesktop.org/ xcb.freedesktop.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XCB&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;X C B&amp;#039;&amp;#039;&amp;#039;inding&amp;#039;&amp;#039;) ist eine [[Programmbibliothek]], die auf einfache und direkte Weise Transaktionen des [[X Window System|X-Window-Protokolls]] über [[Funktion (Programmierung)|Funktionsaufrufe]] in der Programmiersprache [[C (Programmiersprache)|C]] zur Verfügung stellt.&amp;lt;ref&amp;gt;Bart Massey,J amey Sharp: [http://www.linuxshowcase.org/2001/full_papers/massey/massey.pdf &amp;#039;&amp;#039;XCB: An X Protocol C Binding&amp;#039;&amp;#039;.] (PDF; 53&amp;amp;nbsp;kB) 19. September 2001 (englisch)&amp;lt;/ref&amp;gt; Damit versucht sie, die bisherige [[Xlib]] durch eine leichtgewichtigere Bibliothek zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile ist mit Xlib/XCB eine Xlib erhältlich, deren Transportschicht durch XCB ersetzt wurde. Durch die mit der herkömmlichen Xlib [[Binärschnittstelle|binär kompatible Schnittstelle]] kann es von bestehenden Programmen anstelle der herkömmlichen Xlib verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Übersicht ==&lt;br /&gt;
XCB wurde als kleinerer, modernisierter Ersatz für Xlib konzipiert, früher die primäre [[C (Programmiersprache)|C]]-Bibliothek für die Kommunikation mit dem X-Window-System, zeitgleich mit einer umfassenderen Überarbeitung der X-Implementierung, die in den frühen 2000er Jahren stattfand.&amp;lt;ref&amp;gt;{{Internetquelle | url=https://keithp.com/~keithp/talks/xarch_ols2004/xarch_ols2004.pdf | titel=The (Re)Architecture of the X Window System | sprache=en | datum=2003 | zugriff=2019-05-27}}&amp;lt;/ref&amp;gt; Die Hauptziele von XCB sind:&lt;br /&gt;
* eine Reduktion der Größe und Komplexität der Bibliothek erzielen&lt;br /&gt;
* einen direkten Zugriff auf das X11-Protokoll zu bieten&lt;br /&gt;
&lt;br /&gt;
Die erforderliche Größenreduzierung wird in erster Linie dadurch erreicht, dass der Umfang von XCB auf die Handhabung des X-Protokolls beschränkt wird und Xlib-Funktionen, wie die umfangreiche [[Dienstprogramm]]-Bibliothek, weggelassen werden, die bei Anwendungen allerdings auch weniger genutzt wurde. Sekundäre Ziele sind unter anderem, die C-Schnittstelle asynchron zu machen, ein besseres [[Multithreading]] zu ermöglichen und Erweiterungen (über XML-Protokollbeschreibungen) einfacher zu implementieren.&lt;br /&gt;
Die Beschreibungen der Kern- und Erweiterungsprotokolle sind in [[XML]], wobei ein in [[Python (Programmiersprache)|Python]] geschriebenes Programm die C-[[Sprachanbindung|Bindings]] erstellt.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Ziel ist es, mit Hilfe der Protokollbeschreibungen eine Protokolldokumentation, weitere Sprachbindungen und serverseitige [[Stub (Programmierung)|Stub]]s erstellen zu können.&lt;br /&gt;
&lt;br /&gt;
=== Xlib-Kompatibilität ===&lt;br /&gt;
Xlib/XCB bietet Kompatibilität mit der binären Anwendungsschnittstelle mit Xlib und XCB und bietet einen inkrementellen Portierungspfad. Xlib/XCB verwendet die Protokollschicht von Xlib, ersetzt aber die Xlib-Transportschicht durch XCB und bietet Zugriff auf die zugrundeliegende XCB-Verbindung zur direkten Verwendung von XCB. Xlib/XCB ermöglicht es einer Anwendung, eine einzige Verbindung zum X-Anzeigeserver zu öffnen und sowohl XCB als auch Xlib zu verwenden, möglicherweise durch eine Mischung von Bibliotheken, die für die eine oder andere Anwendung entwickelt wurden.&amp;lt;ref&amp;gt;{{Internetquelle | url=https://xcb.freedesktop.org/XlibXcb/ | titel=Xlib/XCB: Xlib with XCB transport | sprache=en | datum= | zugriff=2019-05-27}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle | url=https://lists.debian.org/debian-devel-announce/2006/11/msg00010.html | titel=libx11 with Xlib/XCB now in experimental; please test with your packages | sprache=en | datum= | zugriff=2019-05-27}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ziele ==&lt;br /&gt;
XCB strebt folgende Ziele an:&lt;br /&gt;
* kleiner und weniger komplex&lt;br /&gt;
* direkter Zugriff auf das X11-Protokoll&lt;br /&gt;
* asynchron, um nebenläufige Programme besser zu unterstützen&lt;br /&gt;
* leicht zu erweitern&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Während in Xlib bzw. in Xlib/XCB die [[Ereignisschleife]] immer noch in Xlib-Funktionsaufrufen gemacht wird, sieht man hier ein Programmstück ohne Xlib-Aufrufe. Die Aufrufe sind etwas systemnaher, als man es von Xlib gewohnt ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 /* einfache XCB-Applikation, die ein Rechteck in ein Fenster zeichnet.&lt;br /&gt;
    Kompilierbar beispielsweise mit: gcc -o xcbtest xcbtest.c -lxcb   */&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;xcb/xcb.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
   xcb_connection_t    *c;&lt;br /&gt;
   xcb_screen_t        *s;&lt;br /&gt;
   xcb_window_t         w;&lt;br /&gt;
   xcb_gcontext_t       g;&lt;br /&gt;
   xcb_generic_event_t *e;&lt;br /&gt;
   uint32_t             mask;&lt;br /&gt;
   uint32_t             values[2];&lt;br /&gt;
   int                  done = 0;&lt;br /&gt;
   xcb_rectangle_t      r = { 20, 20, 60, 60 };&lt;br /&gt;
&lt;br /&gt;
                        /* Verbindung zum X-Server öffnen */&lt;br /&gt;
   if((c = xcb_connect(NULL,NULL)) == NULL) {&lt;br /&gt;
     printf(&amp;quot;Cannot open display\n&amp;quot;);&lt;br /&gt;
     exit(1);&lt;br /&gt;
   }&lt;br /&gt;
                        /* get the first screen */&lt;br /&gt;
   s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data;&lt;br /&gt;
&lt;br /&gt;
                        /* schwarzen Grafikkontext erzeugen */&lt;br /&gt;
   g = xcb_generate_id(c);&lt;br /&gt;
   w = s-&amp;gt;root;&lt;br /&gt;
   mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;&lt;br /&gt;
   values[0] = s-&amp;gt;black_pixel;&lt;br /&gt;
   values[1] = 0;&lt;br /&gt;
   xcb_create_gc(c, g, w, mask, values);&lt;br /&gt;
&lt;br /&gt;
                        /* Fenster erzeugen */&lt;br /&gt;
   w = xcb_generate_id(c);&lt;br /&gt;
   mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;&lt;br /&gt;
   values[0] = s-&amp;gt;white_pixel;&lt;br /&gt;
   values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS;&lt;br /&gt;
   xcb_create_window(c, s-&amp;gt;root_depth, w, s-&amp;gt;root,&lt;br /&gt;
                   10, 10, 100, 100, 1,&lt;br /&gt;
                   XCB_WINDOW_CLASS_INPUT_OUTPUT, s-&amp;gt;root_visual,&lt;br /&gt;
                   mask, values);&lt;br /&gt;
&lt;br /&gt;
                        /* Anzeigen (einblenden, &amp;quot;map&amp;quot;) des Fensters */&lt;br /&gt;
   xcb_map_window(c, w);&lt;br /&gt;
&lt;br /&gt;
   xcb_flush(c);&lt;br /&gt;
&lt;br /&gt;
                        /* event loop, Ereignisschleife */&lt;br /&gt;
   while (!done &amp;amp;&amp;amp; (e = xcb_wait_for_event(c))) {&lt;br /&gt;
     switch (e-&amp;gt;response_type &amp;amp; ~0x80) {&lt;br /&gt;
     case XCB_EXPOSE:    /* draw or redraw the window */&lt;br /&gt;
       xcb_poly_fill_rectangle(c, w, g,  1, &amp;amp;r);&lt;br /&gt;
       xcb_flush(c);&lt;br /&gt;
       break;&lt;br /&gt;
     case XCB_KEY_PRESS:  /* beenden, wenn eine Taste gedrückt wird */&lt;br /&gt;
       done = 1;&lt;br /&gt;
       break;&lt;br /&gt;
     }&lt;br /&gt;
     free(e);&lt;br /&gt;
   }&lt;br /&gt;
                        /* Verbindung zum X-Server trennen */&lt;br /&gt;
   xcb_disconnect(c);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://xcb.freedesktop.org/ xcb.freedesktop.org] Wiki&lt;br /&gt;
** [http://xcb.freedesktop.org/XcbApi/ XCB API Referenz] (englisch)&lt;br /&gt;
** [http://xcb.freedesktop.org/Publications Weitere Publikationen] (englisch)&lt;br /&gt;
* [https://www.x.org/releases/current/doc/libxcb/tutorial/index.html Basic Graphics Programming With the XCB Library] Tutorial (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Xcb}}&lt;br /&gt;
[[Kategorie:X Window System]]&lt;br /&gt;
[[Kategorie:Freedesktop.org]]&lt;br /&gt;
[[Kategorie:C-Bibliothek]]&lt;br /&gt;
[[Kategorie:Abkürzung|XCB]]&lt;/div&gt;</summary>
		<author><name>imported&gt;MichielN</name></author>
	</entry>
</feed>