fbpx
Wikipedia

Xlib

Xlib es una biblioteca que reúne un conjunto de funciones y macros realizadas en el lenguaje de programación C y utilizadas por un cliente para hacer de interfaz con el servidor gráfico de X Window System.[1]​ En resumen, es una interfaz de programación de bajo nivel para X11. Xlib está basada en la filosofía de eventos (o mensajes). La biblioteca apareció alrededor del 1985. Algunas aplicaciones utilizan directamente Xlib, sin embargo es muy común que se utilicen bibliotecas que a la vez la utilizan, entre ellas se encuentran: X Toolkit Intrinsics (Xt), Xaw, XView, Motif, GTK+, Qt (versión para X11), Tk.

Xlib
Información general
Tipo de programa Biblioteca gráfica
Desarrollador X.Org Foundation
Lanzamiento inicial 1985
Licencia Licencia de The Open Group[1]
Estado actual activo
Información técnica
Programado en C
Plataformas admitidas X Window System
Versiones
Última versión estable 1.5.0 6 de junio de 2012[1]
Asistencia técnica
Enlaces
Sitio web oficial
Repositorio de código
Seguimiento de errores

Xlib proporciona un método relativamente sencillo para realizar peticiones de protocolo X al servidor. Incluye funciones para realizar más livianamente las tareas más frecuentes, permitiendo al programador no usar el protocolo X para dichas tareas. Proporciona rutinas para facilitar la labor de crear y manipular recursos básicos (ventanas, contextos gráficos,...), el dibujo de elementos gráficos (botones, líneas,...) o generar la entrada y salida de texto, entre otros.

Estructuras y tipos de datos

 
Xlib y otras bibliotecas que la utilizan.

Los tipos de datos principales en Xlib están en la estructura Display[2]​ y en los tipos de los identificadores.

Display, que viene del inglés y en español es pantalla, informalmente significa un dispositivo físico o virtual donde se realizan las operaciones gráficas. La estructura Display en la biblioteca Xlib contiene información acerca de la pantalla, aunque también contiene información acerca del canal entre el cliente y el servidor gráfico. Por ejemplo, en un sistema operativo unix-like, la estructura Display contiene un manipuladar de archivo del socket de ese canal (que se puede recuperar usando la macro ConnectionNumber.) La mayoría de las funciones de Xlib tienen una estructura Display como uno de los argumentos para permitirle operar en un canal en específico. En particular, todas las funciones de Xlib que interactúan con el servidor gráfico necesitan de esta estructura para acceder al canal. Algunas otras funciones necesitan de esta estructura, aunque operen localmente, porque operan sobre datos relativos a un canal en específico. Operaciones de esta clase incluyen por ejemplo operaciones sobre una cola de mensajes.

El servidor maneja las ventanas, los mapas de color, etc., lo cual significa que los datos acerca de su implementación se almacenan en el servidor. El cliente opera sobre esos objetos utilizando identificadores. El cliente no puede actuar directamente sobre un objeto, solo puede pedírselo únicamente al servidor para que éste realice la operación especificada por el identificador de un objeto.

Los tipos Windows, Pixmap, Font, Colormap, etc. son todos identificadores, los cuales son enteros de 32 bits (como los del mismo protocolo X11). Un cliente "crea" una ventana haciendo un pedido al servidor. Esto se realiza haciendo una llamada a una función de Xlib que devuelve un identificador para la ventana, que es, un número. El identificador puede ser usado por el cliente para poder realizar otras operaciones sobre la misma ventana en el servidor.

Los identificadores son únicos para el servidor. La mayoría pueden ser utilizados por diferentes aplicaciones para hacer referencia a los mismos objetos. Por ejemplo, dos aplicaciones se conectan al mismo servidor usando el mismo identificador para referirse a la misma ventana. Estas dos aplicaciones pueden utilizar dos canales diferentes, y tener dos diferentes estructuras Display; sin embargo, cuando hagan un pedido de operación con el mismo identificador, estas se harán sobre el mismo objeto.

Funciones

Proporcionan a una aplicación la posibilidad de: abrir una presentación X, crear ventanas y escribir en ellas, recuperar eventos y cerrar la presentación. Casi todas las funciones se ejecutan de forma asíncrona y son peticiones enviadas a un buffer de salida. Para el trabajo en modo síncrono se requiere de Xsync tras la función de Xlib que se quiere ejecutar en modo síncrono.

Las funciones de la biblioteca Xlib pueden agruparse en:

  1. operaciones de conexión (XOpenDisplay, XCloseDisplay,...);
  2. requerimientos al servidor, incluyendo requerimientos para operaciones (XCreateWindow, XCreateGC,...) y requerimientos de información (XGetWindowProperty,...); y
  3. operaciones del cliente: de eventos (XNextEvent, XPeekEvent,...) y otras operaciones de datos locales (XLookupKeysym, XParseGeometry, XSetRegion, XCreateImage, XSaveContext,...)

Archivos de encabezados

Los archivos de encabezado son:

# include <X11/Xlib.h> # include <X11/Xutil.h> # include <X11/Xos.h> 

Convenios de nombres de funciones y estructura de datos

Funciones y macros
Se encadenan palabras, la primera letra de cada una de ellas en mayúsculas. Ejemplo: NumeroDias. El nombre de las funciones empiezan con X mayúsculas. El nombre de las macros jamás lo hace.
Símbolos externos de X
Las variables están expresadas en minúsculas, y en las macros se utilizan todas mayúsculas. Los nombres compuestos son separados por el guion bajo "_"
Órdenes de los argumentos en las llamadas a funciones
  1. Presentación: El argumento Display, si aparece, siempre es el primero en la lista de los argumentos.
  2. Ventanas, fuentes y otros recursos X: El contexto Gráfico siempre va detrás de todos los de este tipo.
  3. Fuente y destino: Algunas funciones toman algo de uno o más argumentos (fuentes), y depositan el resultado en otros (destino). Las fuentes van antes del destino.
  4. x, y anchura y altura: (x, y son las coordenadas) El orden de aparición es tal cual se muestra.
  5. Máscara de bits: Para cambiar algún miembro de la estructura se debe utilizar una máscara de bits. Si una función tiene una máscara de bits como argumento, la máscara precede al puntero de la estructura.

Errores

Hay funciones en Xlib que devuelven un entero (resourceID), este referencia a objetos del servidor X (Window, Font, Pixmap, Colormap, Cursor y Gcontext) Hay funciones que devuelven un entero, si se encuentra a cero puede considerarse un error.

Interacción con el Protocolo X

El protocolo X tiene una arquitectura cliente/servidor. Se pueden transferir cuatro tipos de paquetes mediante este protocolo:

  1. Peticiones: el cliente solicita algo al servidor.
  2. Réplicas: las envía el servidor al cliente para responderle a determinadas peticiones.
  3. Eventos: el servidor se los envía al cliente y el cliente indicará para cada ventana que eventos quieren recibir.
  4. Errores: los envía el servidor

Casi todas las rutinas en Xlib son peticiones. Xlib encola dichas peticiones con lo que el cliente puede continuar ejecutándose. Esto se debe a que la gran parte de las llamadas a Xlib no requieren de una respuesta inmediata. Si hay algún problema: buffer lleno, petición de evento,… las peticiones que quedarán en el buffer y no se enviarán al servidor. Xlib envía el buffer al completo en las siguientes situaciones:

  1. Cuando una aplicación llama a una rutina que espera un evento y la cola de eventos no contiene ninguno del tipo que se solicitó
  2. En los caso de las rutinas Query, Fetch o Get. Pues se requiere la información del servidor inmediatamente.
  3. Se envía manualmente el buffer con: Xflush (Display *d) (vacía el buffer de peticiones y las envía al servidor) o Xsync (Display *d Bool discardEvents) (vacía el buffer de salida y espera a que las peticiones sean atendidas por el servidor X)

Ejemplo

El siguiente programa crea una ventana con un pequeño cuadrado negro dentro:

 /*  Aplicación simple que usa Xlib, una ventana con un cuadrado negro en su interior  */   #include <X11/Xlib.h>  #include <stdio.h>  #include <stdlib.h>  #include <string.h>   int main(void) {  Display *d;  Window w;  XEvent e;  char *msg = "¡Hola, Mundo!";  int s;    /* abrir la conexión con el servidor gráfico*/  d = XOpenDisplay(NULL);  if (d == NULL) {  fprintf(stderr, "No se pudo conectar al servidor gráfico\n");  exit(1);  }   s = DefaultScreen(d);    /* crea la ventana */  w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 100, 100, 1,    BlackPixel(d, s), WhitePixel(d, s));    /* selecciona la clase de eventos que interesan */  XSelectInput(d, w, ExposureMask | KeyPressMask);    /* muestra la ventana */  XMapWindow(d, w);    /* lazo de eventos */  while (1) {  XNextEvent(d, &e);   /* dibujar o redibujar la ventana */  if (e.type == Expose) {  XFillRectangle(d, w, DefaultGC(d, s), 20, 20, 10, 10);  XDrawString(d, w, DefaultGC(d, s), 50, 50, msg, strlen(msg));  }   /* salir si se presionó una tecla */  if (e.type == KeyPress)  break;  }    /* cerrar la conexión al servidor gráfico */  XCloseDisplay(d);   return 0;  } 

El cliente crea una conexión con el servidor llamando a la función XOpenDisplay(línea 18). Luego pide la creación de la ventana con XCreateSimpleWindow(línea 27). Una llamada más, a XMapWindow(línea 34), se necesita para mapear la ventana en la pantalla, es decir para que sea visible.

El cuadrado se dibuja llamando a XFillRectangle(línea 41). Esta operación solo puede realizarse cuando la ventana se crea. Sin embargo una vez realizado esto no es suficiente, de hecho, el contenido de la ventana no siempre está garantizado que se preserve. Por ejemplo, si la ventanta es cubierta o descubierta, se necesita que su contenido sea redibujado. El programa está informado de que la ventana o parte de ella debe dibujarse o redibujarse mediante la recepción de un evento Expose(línea 40).

El redibujado del contenido está dentro de un lazo para eventos. Antes que entre a este lazo, se establece la clase de eventos de la aplicación, en este caso se realiza con la llamada a XSelectInput(línea 31). El lazo de evento (entre líneas 37 y 47) espera por la llegada de un evento: si el evento es una tecla presionada, la aplicación termina; si el evento es Expose, se redibuja el contenido de la ventana. La función XNextEvent(línea 38) bloquea y vuelca el buffer requerido si no hay ningún evento en la cola.

Otras bibliotecas

Xlib provee lo fundamental para interactuar con el servidor X, pero utilizar sólo Xlib puede llegar a ser muy complicado. Por ello, se han ido construyendo interfaces de más alto nivel como: Xt (X Toolkit Intrinsics) y sus derivados (Motif y Xaw), Qt o GTK+.

La biblioteca de XCB está recomendada por X.Org como reemplazo de Xlib, ya que provee un acceso de bajo nivel más eficiente y simple, y no se recomienda el uso de Xlib para nuevos desarrollos.[3]

Véase también

Referencias

  1. Parte de X11R7.7, ver fuentes libX11-1.5.0.tar.gz
  2. «Xlib - C Language X Interface: Chapter 2. Display Functions» (en inglés). 
  3. Documentación de X.Org Foundation

Bibliografía

  • Adrian Nye (julio de 1990). The Definitive Guide to the X Window System Volume Two: Xlib Reference Manual for Version 11 (en inglés) (5 edición). Internet Archive: O'Reilly & Associated, Inc. pp. 765. ISBN 0-937175-12-9. «Libro completo donado a Internet Archive». 
  • N.Adrian. Xlib Programming Manual for Version 11. X Window System. Vol 1. O'Reilly and ASS, 1992.
  • Barkakati, Naba. Los secretos de LINUX. Anaya Multimedia, 1997.

Enlaces externos

  • (en inglés)
  • Artículo sobre xLib y XCB (en inglés)
  • Programación en X Window System
  • Low-level access to the X11 library Módulo en Perl para acceso a Xlib.
  • Python X Library Biblioteca en python para X Window System, que no implementa una interfaz con xlib.
  •   Datos: Q1579570
  •   Multimedia: Xlib

xlib, biblioteca, reúne, conjunto, funciones, macros, realizadas, lenguaje, programación, utilizadas, cliente, para, hacer, interfaz, servidor, gráfico, window, system, resumen, interfaz, programación, bajo, nivel, para, está, basada, filosofía, eventos, mensa. Xlib es una biblioteca que reune un conjunto de funciones y macros realizadas en el lenguaje de programacion C y utilizadas por un cliente para hacer de interfaz con el servidor grafico de X Window System 1 En resumen es una interfaz de programacion de bajo nivel para X11 Xlib esta basada en la filosofia de eventos o mensajes La biblioteca aparecio alrededor del 1985 Algunas aplicaciones utilizan directamente Xlib sin embargo es muy comun que se utilicen bibliotecas que a la vez la utilizan entre ellas se encuentran X Toolkit Intrinsics Xt Xaw XView Motif GTK Qt version para X11 Tk XlibInformacion generalTipo de programaBiblioteca graficaDesarrolladorX Org FoundationLanzamiento inicial1985LicenciaLicencia de The Open Group 1 Estado actualactivoInformacion tecnicaProgramado enCPlataformas admitidasX Window SystemVersionesUltima version estable1 5 0 6 de junio de 2012 1 Asistencia tecnicaEnlacesSitio web oficial Repositorio de codigo Seguimiento de errores editar datos en Wikidata Xlib proporciona un metodo relativamente sencillo para realizar peticiones de protocolo X al servidor Incluye funciones para realizar mas livianamente las tareas mas frecuentes permitiendo al programador no usar el protocolo X para dichas tareas Proporciona rutinas para facilitar la labor de crear y manipular recursos basicos ventanas contextos graficos el dibujo de elementos graficos botones lineas o generar la entrada y salida de texto entre otros Indice 1 Estructuras y tipos de datos 2 Funciones 2 1 Archivos de encabezados 2 2 Convenios de nombres de funciones y estructura de datos 2 3 Errores 3 Interaccion con el Protocolo X 4 Ejemplo 5 Otras bibliotecas 6 Vease tambien 7 Referencias 7 1 Bibliografia 8 Enlaces externosEstructuras y tipos de datos Editar Xlib y otras bibliotecas que la utilizan Los tipos de datos principales en Xlib estan en la estructura Display 2 y en los tipos de los identificadores Display que viene del ingles y en espanol es pantalla informalmente significa un dispositivo fisico o virtual donde se realizan las operaciones graficas La estructura Display en la biblioteca Xlib contiene informacion acerca de la pantalla aunque tambien contiene informacion acerca del canal entre el cliente y el servidor grafico Por ejemplo en un sistema operativo unix like la estructura Display contiene un manipuladar de archivo del socket de ese canal que se puede recuperar usando la macro ConnectionNumber La mayoria de las funciones de Xlib tienen una estructura Display como uno de los argumentos para permitirle operar en un canal en especifico En particular todas las funciones de Xlib que interactuan con el servidor grafico necesitan de esta estructura para acceder al canal Algunas otras funciones necesitan de esta estructura aunque operen localmente porque operan sobre datos relativos a un canal en especifico Operaciones de esta clase incluyen por ejemplo operaciones sobre una cola de mensajes El servidor maneja las ventanas los mapas de color etc lo cual significa que los datos acerca de su implementacion se almacenan en el servidor El cliente opera sobre esos objetos utilizando identificadores El cliente no puede actuar directamente sobre un objeto solo puede pedirselo unicamente al servidor para que este realice la operacion especificada por el identificador de un objeto Los tipos Windows Pixmap Font Colormap etc son todos identificadores los cuales son enteros de 32 bits como los del mismo protocolo X11 Un cliente crea una ventana haciendo un pedido al servidor Esto se realiza haciendo una llamada a una funcion de Xlib que devuelve un identificador para la ventana que es un numero El identificador puede ser usado por el cliente para poder realizar otras operaciones sobre la misma ventana en el servidor Los identificadores son unicos para el servidor La mayoria pueden ser utilizados por diferentes aplicaciones para hacer referencia a los mismos objetos Por ejemplo dos aplicaciones se conectan al mismo servidor usando el mismo identificador para referirse a la misma ventana Estas dos aplicaciones pueden utilizar dos canales diferentes y tener dos diferentes estructuras Display sin embargo cuando hagan un pedido de operacion con el mismo identificador estas se haran sobre el mismo objeto Funciones EditarProporcionan a una aplicacion la posibilidad de abrir una presentacion X crear ventanas y escribir en ellas recuperar eventos y cerrar la presentacion Casi todas las funciones se ejecutan de forma asincrona y son peticiones enviadas a un buffer de salida Para el trabajo en modo sincrono se requiere de Xsync tras la funcion de Xlib que se quiere ejecutar en modo sincrono Las funciones de la biblioteca Xlib pueden agruparse en operaciones de conexion XOpenDisplay XCloseDisplay requerimientos al servidor incluyendo requerimientos para operaciones XCreateWindow XCreateGC y requerimientos de informacion XGetWindowProperty y operaciones del cliente de eventos XNextEvent XPeekEvent y otras operaciones de datos locales XLookupKeysym XParseGeometry XSetRegion XCreateImage XSaveContext Archivos de encabezados Editar Los archivos de encabezado son include lt X11 Xlib h gt include lt X11 Xutil h gt include lt X11 Xos h gt Convenios de nombres de funciones y estructura de datos Editar Funciones y macros Se encadenan palabras la primera letra de cada una de ellas en mayusculas Ejemplo NumeroDias El nombre de las funciones empiezan con X mayusculas El nombre de las macros jamas lo hace Simbolos externos de X Las variables estan expresadas en minusculas y en las macros se utilizan todas mayusculas Los nombres compuestos son separados por el guion bajo ordenes de los argumentos en las llamadas a funcionesPresentacion El argumento Display si aparece siempre es el primero en la lista de los argumentos Ventanas fuentes y otros recursos X El contexto Grafico siempre va detras de todos los de este tipo Fuente y destino Algunas funciones toman algo de uno o mas argumentos fuentes y depositan el resultado en otros destino Las fuentes van antes del destino x y anchura y altura x y son las coordenadas El orden de aparicion es tal cual se muestra Mascara de bits Para cambiar algun miembro de la estructura se debe utilizar una mascara de bits Si una funcion tiene una mascara de bits como argumento la mascara precede al puntero de la estructura Errores Editar Hay funciones en Xlib que devuelven un entero resourceID este referencia a objetos del servidor X Window Font Pixmap Colormap Cursor y Gcontext Hay funciones que devuelven un entero si se encuentra a cero puede considerarse un error Interaccion con el Protocolo X EditarEl protocolo X tiene una arquitectura cliente servidor Se pueden transferir cuatro tipos de paquetes mediante este protocolo Peticiones el cliente solicita algo al servidor Replicas las envia el servidor al cliente para responderle a determinadas peticiones Eventos el servidor se los envia al cliente y el cliente indicara para cada ventana que eventos quieren recibir Errores los envia el servidorCasi todas las rutinas en Xlib son peticiones Xlib encola dichas peticiones con lo que el cliente puede continuar ejecutandose Esto se debe a que la gran parte de las llamadas a Xlib no requieren de una respuesta inmediata Si hay algun problema buffer lleno peticion de evento las peticiones que quedaran en el buffer y no se enviaran al servidor Xlib envia el buffer al completo en las siguientes situaciones Cuando una aplicacion llama a una rutina que espera un evento y la cola de eventos no contiene ninguno del tipo que se solicito En los caso de las rutinas Query Fetch o Get Pues se requiere la informacion del servidor inmediatamente Se envia manualmente el buffer con Xflush Display d vacia el buffer de peticiones y las envia al servidor o Xsync Display d Bool discardEvents vacia el buffer de salida y espera a que las peticiones sean atendidas por el servidor X Ejemplo EditarEl siguiente programa crea una ventana con un pequeno cuadrado negro dentro Aplicacion simple que usa Xlib una ventana con un cuadrado negro en su interior include lt X11 Xlib h gt include lt stdio h gt include lt stdlib h gt include lt string h gt int main void Display d Window w XEvent e char msg Hola Mundo int s abrir la conexion con el servidor grafico d XOpenDisplay NULL if d NULL fprintf stderr No se pudo conectar al servidor grafico n exit 1 s DefaultScreen d crea la ventana w XCreateSimpleWindow d RootWindow d s 10 10 100 100 1 BlackPixel d s WhitePixel d s selecciona la clase de eventos que interesan XSelectInput d w ExposureMask KeyPressMask muestra la ventana XMapWindow d w lazo de eventos while 1 XNextEvent d amp e dibujar o redibujar la ventana if e type Expose XFillRectangle d w DefaultGC d s 20 20 10 10 XDrawString d w DefaultGC d s 50 50 msg strlen msg salir si se presiono una tecla if e type KeyPress break cerrar la conexion al servidor grafico XCloseDisplay d return 0 El cliente crea una conexion con el servidor llamando a la funcion XOpenDisplay linea 18 Luego pide la creacion de la ventana con XCreateSimpleWindow linea 27 Una llamada mas a XMapWindow linea 34 se necesita para mapear la ventana en la pantalla es decir para que sea visible El cuadrado se dibuja llamando a XFillRectangle linea 41 Esta operacion solo puede realizarse cuando la ventana se crea Sin embargo una vez realizado esto no es suficiente de hecho el contenido de la ventana no siempre esta garantizado que se preserve Por ejemplo si la ventanta es cubierta o descubierta se necesita que su contenido sea redibujado El programa esta informado de que la ventana o parte de ella debe dibujarse o redibujarse mediante la recepcion de un evento Expose linea 40 El redibujado del contenido esta dentro de un lazo para eventos Antes que entre a este lazo se establece la clase de eventos de la aplicacion en este caso se realiza con la llamada a XSelectInput linea 31 El lazo de evento entre lineas 37 y 47 espera por la llegada de un evento si el evento es una tecla presionada la aplicacion termina si el evento es Expose se redibuja el contenido de la ventana La funcion XNextEvent linea 38 bloquea y vuelca el buffer requerido si no hay ningun evento en la cola Otras bibliotecas EditarXlib provee lo fundamental para interactuar con el servidor X pero utilizar solo Xlib puede llegar a ser muy complicado Por ello se han ido construyendo interfaces de mas alto nivel como Xt X Toolkit Intrinsics y sus derivados Motif y Xaw Qt o GTK La biblioteca de XCB esta recomendada por X Org como reemplazo de Xlib ya que provee un acceso de bajo nivel mas eficiente y simple y no se recomienda el uso de Xlib para nuevos desarrollos 3 Vease tambien EditarX Window System Protocolo base de X Window System Protocolos y arquitectura de X Window SystemReferencias Editar a b c Parte de X11R7 7 ver fuentes libX11 1 5 0 tar gz Xlib C Language X Interface Chapter 2 Display Functions en ingles Documentacion de X Org Foundation Bibliografia Editar Adrian Nye julio de 1990 The Definitive Guide to the X Window System Volume Two Xlib Reference Manual for Version 11 en ingles 5 edicion Internet Archive O Reilly amp Associated Inc pp 765 ISBN 0 937175 12 9 Libro completo donado a Internet Archive N Adrian Xlib Programming Manual for Version 11 X Window System Vol 1 O Reilly and ASS 1992 Barkakati Naba Los secretos de LINUX Anaya Multimedia 1997 Enlaces externos EditarXlib Programming Manual for Version 11 X Window System en ingles Articulo sobre xLib y XCB en ingles Programacion en X Window System Low level access to the X11 library Modulo en Perl para acceso a Xlib Python X Library Biblioteca en python para X Window System que no implementa una interfaz con xlib Datos Q1579570 Multimedia XlibObtenido de https es wikipedia org w index php title Xlib amp oldid 135522188, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos