Xlib

Xlib
Xlib
개발자X.Org 재단
초기 릴리즈~개요[citation needed]
저장소
기입처C
유형도서관
웹 사이트www.x.org, 문서: www.x.org/releases/current/doc/libX11/libX11/libX11.html
X11 클라이언트는 xlib를 사용하여 디스플레이 서버와 통신합니다.

Xlib(libX11이라고도 함)는 C 프로그래밍 언어로 작성된 X Window System 프로토콜 클라이언트 라이브러리입니다.X 서버와 상호 작용하기 위한 기능이 포함되어 있습니다. 함수는 프로그래머가 X 프로토콜의 세부사항을 몰라도 프로그램을 작성할 수 있도록 합니다.

Xlib를 직접 사용하는 애플리케이션은 거의 없습니다.대신 Xlib 함수를 사용하여 위젯 툴킷을 제공하는 다른 라이브러리를 사용합니다.

Xlib은 1985년경[citation needed] 등장했으며 많은 Unix 계열 운영 체제GUI에서 사용됩니다.XCB를 [1]사용한 Xlib의 재실장은 2007년에 도입되었습니다.

데이터형

KMS(커널 모드 설정), Linux의 역할 예시
The Linux graphic stack
2013년 8월 24일 현재 Linux 그래픽스 스택을 보여줍니다.
Scheme: Humane-machine_interaction
XCB 및 Xlib는 디스플레이 서버 통신 프로토콜을 구현하는 클라이언트 라이브러리입니다.
The place of certain Linux kernel modules
디스플레이 서버는 커널(여기서는 Linux 커널)과 클라이언트 사이에 있습니다.특정 프로토콜을 통해 클라이언트와 통신합니다.
The place of certain Linux kernel modules
심플한 Direct Media 레이어는 Xlib를 회피하고 프레임 버퍼에 직접 쓸 수 있습니다.EGL에 대한 추가 포트도 사용 가능

Xlib의 주요 데이터 유형은Display[2] 구조 및 식별자 유형입니다.

비공식적으로 디스플레이는 그래픽 작업이 수행되는 물리적 또는 가상 디바이스입니다.DisplayXlib 라이브러리의 구조에는 디스플레이에 관한 정보가 포함되어 있습니다만, 보다 중요한 것은 클라이언트와 서버 사이의 채널에 관한 정보가 포함되어 있습니다.예를 들어 Unix와 유사한 운영체제에서는Displaystructure에는 이 채널의 소켓 파일핸들이 포함되어 있습니다(이것은,ConnectionNumber매크로)대부분의 Xlib 함수에는Displaystructure는 채널 상에서 동작하거나 특정 채널에 상대적이기 때문에 인수로서 기능합니다.특히 서버와 대화하는 모든 Xlib 함수는 채널에 액세스하기 위해 이 구조가 필요합니다.일부 다른 함수는 특정 채널에 상대적인 데이터로 동작하기 때문에 로컬에서 동작하더라도 이 구조가 필요합니다.이런 종류의 동작에는 이벤트큐에서의 동작 등이 포함됩니다.이것에 대해서는, 이하에 설명합니다.

Windows, colormap 등은 서버에 의해 관리되므로 실제 구현에 관한 데이터는 모두 서버에 저장됩니다.클라이언트는 이러한 오브젝트에 대해 ID를 사용하여 조작합니다.클라이언트는 오브젝트에 대해 직접 조작할 수 없지만 오브젝트의 ID를 지정하는 조작을 실행하도록 서버에 요구할 수 있습니다.

종류Windows,Pixmap,Font,Colormap, 등은 모두 32비트 정수인 식별자입니다(X11 프로토콜 자체와 동일).클라이언트는 서버에 창 작성을 요청하여 창을 '작성'합니다.이는 윈도우 식별자, 즉 번호를 반환하는 Xlib 함수에 대한 호출을 통해 수행됩니다.이 식별자는 클라이언트에 의해 서버에 같은 창상의 다른 조작을 요구하기 위해 사용할 수 있습니다.

식별자는 서버에 고유합니다.이들 중 대부분은 다른 응용 프로그램에서 동일한 개체를 참조하기 위해 사용할 수 있습니다.예를 들어, 같은 서버에 접속되어 있는2개의 애플리케이션은, 같은 식별자를 사용해 같은 창을 참조합니다.이들 2개의 애플리케이션은 2개의 다른 채널을 사용하기 때문에 2개의 다른 채널이 있습니다.구조를 표시합니다. 단, 동일한 식별자에 대한 작업을 요청하면 이러한 작업은 동일한 개체에 대해 수행됩니다.

프로토콜 및 이벤트

서버에 요구를 송신하는 Xlib 함수는, 통상, 이러한 요구를 곧바로 송신하지 않고, 요구 버퍼라고 불리는 버퍼에 보존합니다.이 경우 request라는 용어는 서버에 대한 클라이언트로부터의 요구를 의미합니다.요청 버퍼에는 화면에 가시적인 영향을 미치는 요구뿐만 아니라 서버에 대한 모든 종류의 요구를 포함할 수 있습니다.요구 버퍼는 함수에 대한 호출 후에 플러시(즉, 지금까지 수행된 모든 요구가 서버로 전송됨)되는 것이 보증됩니다.XSync또는XFlush서버로부터 값을 반환하는 함수에 콜한 후(이러한 함수는 응답을 수신할 때까지 차단합니다), 및 그 외의 몇개의 조건에서는.

Xlib는 수신된 이벤트를 큐에 저장합니다.클라이언트 애플리케이션은 큐에서 이벤트를 검사하고 가져올 수 있습니다.X 서버가 이벤트를 비동기적으로 전송하는 동안 Xlib 라이브러리를 사용하는 애플리케이션은 큐 내의 이벤트에 액세스하기 위해 Xlib 함수를 명시적으로 호출해야 합니다.이러한 기능 중 일부는 차단될 수 있습니다.이 경우 요청 버퍼도 플러시합니다.

대신 오류는 비동기적으로 수신 및 처리됩니다.응용 프로그램은 서버로부터 오류 메시지가 수신될 때마다 호출되는 오류 핸들러를 제공할 수 있습니다.

창 또는 창의 일부분이 표시되지 않으면 창의 내용이 보존되지 않을 수 있습니다.이 경우 어플리케이션은Expose이벤트 중 한 부분의 창이 다시 나타날 때 발생합니다.그런 다음 응용 프로그램이 다시 창의 내용을 그리게 됩니다.

기능들

Xlib 라이브러리의 기능은 다음과 같이 그룹화할 수 있습니다.

  1. 접속 조작(XOpenDisplay,XCloseDisplay, ...);
  2. 서버에 대한 요구(조작 요구 포함)XCreateWindow,XCreateGC,...) 및 정보 요청(XGetWindowProperty, ... ) 。
  3. 클라이언트의 로컬 조작: 이벤트큐에서의 조작(XNextEvent,XPeekEvent, ...) 및 로컬 데이터에 대한 기타 작업(XLookupKeysym,XParseGeometry,XSetRegion,XCreateImage,XSaveContext, ...)

창에 상자 및 텍스트를 그리는 간단한 Xlib 응용 프로그램.윈도우 매니저 장식이 없습니다.
창에 상자 및 텍스트를 그리는 간단한 Xlib 응용 프로그램.IceWM매니저 장식 포함.

다음 프로그램은 검은색 정사각형이 있는 창을 만듭니다.

/* 창을 만들고 그 안에 상자를 그리기 위한 간단한 Xlib 응용 프로그램입니다. gcc input.c -o 출력 - lX11 */   #실패하다 <X11/Xlib.h> #실패하다 <stdio.h> #실패하다 <stdlib.h> #실패하다 <문자열>h>   인트 주된(무효) {     표시 *표시;      윈도;     엑스이벤트 이벤트;      *메시지 = "안녕, 월드!";     인트 s;       // 서버에 대한 연결 열기     표시 = XOpen 디스플레이(특수한 순서);     한다면 (표시 == 특수한 순서)     {         인쇄(하드, "디스플레이를 열 수 없습니다.\n");         퇴장(1);     }       s = 기본 화면(표시);       // 창 생성     윈도 = XReate Simple Window(표시, 루트 윈도(표시, s), 10, 10, 200, 200, 1,                                  블랙픽셀(표시, s), 화이트픽셀(표시, s));       // 관심 있는 이벤트 종류 선택     XSelect 입력(표시, 윈도, 노출 마스크   키 누르기 마스크);       // 창을 매핑(표시)합니다.     XMap 윈도(표시, 윈도);       // 이벤트 루프     위해서 (;;)     {         XNext 이벤트(표시, &이벤트);           // 창을 그리거나 다시 그립니다.         한다면 (이벤트.유형 == 노출)         {             XFill 직각(표시, 윈도, 디폴트 GC(표시, s), 20, 20, 10, 10);             XDrawString(표시, 윈도, 디폴트 GC(표시, s), 50, 50, 메시지, 스트렌(메시지));         }         // 키를 누르면 종료됩니다.         한다면 (이벤트.유형 == 키 누르기)             브레이크.;     }       // 서버에 대한 연결 닫기     XClose 디스플레이(표시);       돌아가다 0;  } 

클라이언트는 콜을 통해 서버와의 접속을 확립합니다.XOpenDisplay그런 다음 다음 다음 명령어를 사용하여 창 생성을 요청합니다.XCreateSimpleWindow에의 개별 콜XMapWindow는 창을 매핑하기 위해, 즉 화면에 표시하기 위해 필요합니다.

정사각형은 부름에 의해 그려진다.XFillRectangle이 작업은 창이 생성된 후에만 수행할 수 있습니다.그러나 한 번 실행하는 것만으로는 충분하지 않을 수 있습니다.실제로 창의 내용이 항상 보존되는 것은 아닙니다.예를 들어 창을 가렸다가 다시 여는 경우 창 내용을 다시 그려야 할 수 있습니다.프로그램은 윈도우 또는 그 일부가 수신에 의해 그려져야 한다는 것을 알립니다.Expose이벤트입니다.

따라서 윈도우 콘텐츠의 도면은 이벤트를 처리하는 루프 내부에서 이루어집니다.이 루프에 들어가기 전에 어플리케이션의 대상이 되는 이벤트가 선택됩니다.이 경우,XSelectInput. 이벤트 루프는 착신 이벤트를 기다립니다.이 이벤트가 키 누르기일 경우 응용 프로그램은 종료되고 노출 이벤트일 경우 창 내용이 그려집니다.함수XNextEvent는 큐에 이벤트가 없는 경우 요청 버퍼를 차단하고 플러시합니다.

기타 라이브러리

Xlib은 버튼, 메뉴, 스크롤바 등을 지원하지 않습니다.이러한 위젯은 다른 라이브러리에서 제공되며, 라이브러리는 Xlib를 사용합니다.이러한 라이브러리에는 두 가지 종류가 있습니다.

  • X Toolkit Intentics 라이브러리(Xt)를 기반으로 구축되는 라이브러리. 이 라이브러리는 위젯을 지원하지만 특정 위젯은 Xt를 사용하는 위젯 세트 라이브러리에서 제공됩니다(: Xaw 및 Motif).
  • XT 라이브러리(예: X 버전 GTK, Qt, FLTKfpGUI) 없이 Xlib를 사용하여 위젯 세트를 직접 제공하는 라이브러리입니다.

이러한 위젯 라이브러리를 사용하는 애플리케이션은 일반적으로 기본 루프에 들어가기 전에 창의 내용을 지정하므로 명시적으로 처리할 필요가 없습니다.Expose이벤트 및 창 내용을 다시 그립니다.

XCB 라이브러리는 Xlib의 대체 수단입니다.그 주된 목적은 라이브러리 크기 감소와 X11 프로토콜에 대한 직접 액세스입니다.XCB를 하위 계층으로 사용하도록 Xlib을 수정했습니다.

레퍼런스

  1. ^ "XDC2007 Notes". February 9, 2007.
  2. ^ "Display Structure on freedesktop CVS". Tip search for: typedef struct _XDisplay Display.

외부 링크