{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = Xlib
| title                  = Xlib
| logo                   = 
| logo caption           = 
| screenshot             = 
| caption                = 
| collapsible            = 
| author                 = 
| developer              = [[X.Org 재단]]
| released               = ~1985년
| discontinued           = 
| latest release version = {{wikidata|property|preferred|references|edit|P348|P548=Q2804309}}
| latest release date    = {{시작 날짜와 나이|{{wikidata|qualifier|preferred|single|P348|P548=Q2804309|P577}}|df=yes}}
| latest preview version = 
| latest preview date    = 
| frequently updated     = 
| programming language   = [[C (프로그래밍 언어)|C]]
| operating system       = 
| platform               = 
| size                   = 
| language               = 
| status                 = 
| genre                  = [[라이브러리 (컴퓨팅)|라이브러리]]
| license                = 
| website                = {{URL|http://www.x.org}}, 문서: {{URL|http://www.x.org/docs/X11/xlib.pdf}}
}}
'''Xlib'''는 [[C (프로그래밍 언어)|C 프로그래밍 언어]]로 작성된 [[X 윈도 시스템]] 프로토콜 클라이언트 [[라이브러리 (컴퓨팅)|라이브러리]]이다. X [[서버]]와 상호 작용하는 [[함수]]들을 포함하고 있다. 이 함수들은 프로그래머들이 [[통신 프로토콜]]을 자세히 모르더라도 프로그램을 작성할 수 있게 도와 준다. Xlib을 직접 사용하는 응용 프로그램들은 드문 편이지만, 대개 [[위젯 툴킷]]을 제공하기 위해 Xlib 함수들을 사용하는 다른 라이브러리들을 이용하는 편이다:

[[파일:Xlib and XCB in the X Window System graphics stack.svg|섬네일|Xlib와 [[XCB]], 그리고 이들을 사용하는 라이브러리들]]

* [[X 툴킷 인트린식스|인트린식스]] (Xt)
* [[X 아테나 위젯|아테나 위젯 집합]] (Xaw)
* [[모티프 (위젯 툴킷)|모티프]]
* [[FLTK]]
* [[GTK+]]
* [[Qt (툴킷)|Qt]] (X11 버전)
* [[Tk (소프트웨어)|Tk]]

Xlib은 1985년 즈음에 출현했으며 현재 수많은 [[유닉스 계열]] [[운영 체제]]의 [[그래픽 사용자 인터페이스|GUI]]에 사용된다. [[XCB]] 라이브러리는 Xlib을 대체할 목적으로 만들어진 라이브러리이다. 아직까지 Xlib이 널리 쓰이고 있으나, 오늘날 Xlib에서 구현하는 것들은 낮은 수준의 전송 계층으로서 XCB를 대신 이용할 수 있다.

== 자료형 ==
Xlib의 주가 되는 자료형은 <code>Display</code> 구조<ref name="DisplayStructure">{{웹 인용|url=http://webcvs.freedesktop.org/xorg/lib/X11/include/X11/Xlib.h?revision=1.6&view=markup|제목=Display Structure on freedesktop CVS|date=|work=Tip search for: typedef struct _XDisplay Display|publisher=|확인날짜=2008년 5월 8일|보존url=https://web.archive.org/web/20080131195430/http://webcvs.freedesktop.org/xorg/lib/X11/include/X11/Xlib.h?revision=1.6&view=markup|보존날짜=2008년 1월 31일|url-status=dead}}</ref>와 그 식별자의 자료형들이다.

== 예 ==
다음의 프로그램은 내부에 조그마한 검은 사각형이 포함된 창을 하나 만들어낸다:

<syntaxhighlight lang=C>
 /*
  * 창 안에 상자를 그려내는 단순 Xlib 응용 프로그램입니다.
  * gcc input.c -o output -lX11
  */

#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    Display *display;
    Window window;
    XEvent event;
    char *msg = "Hello, World!";
    int s;

    /* 서버 연결 개시 */
    display = XOpenDisplay(NULL);
    if (display == NULL) {
        fprintf(stderr, "display를 열 수 없습니다\n");
        exit(1);
    }

    s = DefaultScreen(display);

    /* 창 만들기 */
    window = XCreateSimpleWindow(display, RootWindow(display, s), 10, 10, 200, 200, 1,
                           BlackPixel(display, s), WhitePixel(display, s));

    /* 이용하려는 이벤트 종류 선택 */
    XSelectInput(display, window, ExposureMask | KeyPressMask);

    /* 창 보이기 */
    XMapWindow(display, window);

    /* 이벤트 루프 */
    while (1) {
        XNextEvent(display, &event);

        /* 창을 (다시) 그리기 */
        if (event.type == Expose) {
            XFillRectangle(display, window, DefaultGC(display, s), 20, 20, 10, 10);
            XDrawString(display, window, DefaultGC(display, s), 50, 50, msg, strlen(msg));
        }
        /* 키 눌림이 있으면 끝내기 */
        if (event.type == KeyPress)
            break;
    }

    /* 서버 연결 닫기 */
    XCloseDisplay(display);

    return 0;
 }
</syntaxhighlight>
클라이언트는 <code>XOpenDisplay</code>를 호출함으로써 서버 연결을 만든다. 그 뒤 <code>XCreateSimpleWindow</code>로 창 만들기를 요청한다. <code>XMapWindow</code>로의 별도 호출은 창을 매핑(보여주기)하는데 필수적이다.

<code>XFillRectangle</code>을 호출함으로써 사각형을 그려낸다. 이 동작은 창이 만들어진 뒤에만 수행할 수 있다. 그러나 한 차례만 수행하는 것은 충분하지 않을 수도 있다. 사실 창의 내용은 언제나 보존될 것임을 보증하지는 않는다. 이를테면 창이 다른 무언가에 의해 가려졌다가 다시 보이게 되면 내용물은 다시 그리기가 필요할 수 있다. 이 프로그램은 창이나 창의 일부가 <code>Expose</code> 이벤트를 도입함으로써 그리기가 필요할 수 있다.

== 참조 ==
<references />

== 같이 보기 ==
* [[X 윈도 시스템]]
* [[X 윈도 시스템 프로토콜 및 아키텍처]]

== 외부 링크 ==
* {{위키공용분류-줄}}
* {{언어링크|en}} [http://tronche.com/gui/x/xlib-tutorial/ Xlib의 짧은 강좌]
* {{언어링크|en}} [http://tronche.com/gui/x/xlib/function-index.html Xlib 함수 매뉴얼 문서]
* {{언어링크|en}} [http://www.x.org/docs/X11/xlib.pdf Xlib - C 언어 X 인터페이스]
* {{언어링크|en}} [http://www.rahul.net/kenton/bib.html X 윈도 및 모티프에 대한 켄튼 리의 문서] {{웨이백|url=http://www.rahul.net/kenton/bib.html |date=20130520013725 }}
* {{언어링크|en}} [https://web.archive.org/web/20071018025425/http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html#create_window Xlib의 긴 강좌]
* {{언어링크|en}} [http://www.dis.uniroma1.it/%7eliberato/screensaver Xlib을 이용하여 화면 보호기 모듈 만들기]

{{위젯 툴킷}}

[[분류:C 라이브러리]]
[[분류:X 라이브러리]]