Кіріспе
X Window System үшін клиент кітапханасы
Xlib (сондай-ақ libX11 деп белгілі) – C бағдарламалау тілінде жазылған X Window System протоколының клиент кітапханасы. Ол X серверімен өзара әрекеттесуге арналған функцияларды қамтиды. Бұл функциялар бағдарламашыларға X протоколының толық егжей-тегжейін білмей-ақ бағдарлама жазуға мүмкіндік береді. Көптеген қолданбалар Xlib-ті тікелей пайдаланбайды, олар виджеттер жиынтығын ұсыну үшін Xlib функцияларын қолданатын басқа кітапханаларды пайдаланады:
X Toolkit Intrinsics (Xt)
Athena виджеттері жиынтығы (Xaw)
Motif
FLTK
GTK
Qt (X11 нұсқасы)
Tk
SDL (Simple DirectMedia Layer)
SFML (Simple and Fast Multimedia Library)
X Toolkit Intrinsics (Xt)
Athena widget set (Xaw)
Motif
FLTK
GTK
Qt (X11 version)
Tk
SDL (Simple DirectMedia Layer)
SFML (Simple and Fast Multimedia Library)
Xlib шамамен 1985 жылы пайда болды және көптеген Unix-ті ұқсайтын операциялық жүйелердегі GUI-лерде қолданылады. Xlib-тің жаңадан жасалған нұсқасы 2007 жылы XCB негізінде ұсынылды.
Деректер түрлері
Xlib-тегі негізгі дерек түрлері – Display құрылымы және идентификаторлардың түрлері болып табылады. Дерексіз айтқанда, дисплей – графикалық операциялар орындалатын физикалық немесе виртуальды құрылғы. Xlib кітапханасының Display құрылымы дисплей туралы ақпаратты қамтиды, бірақ одан да маңыздысы – клиент пен сервер арасындағы байланыс арнасы туралы ақпаратты қамтиды. Мысалы, Unix сияқты операциялық жүйеде Display құрылымы осы арнаның сокетінің файл дескрипторын қамтиды (бұл ConnectionNumber макросын қолдану арқылы алуға болады). Xlib функцияларының көпшілігі аргумент ретінде Display құрылымын қабылдайды, себебі олар байланыс арнасымен жұмыс істейді немесе нақты арнаға қатысты болады. Әсіресе, сервермен өзара әрекеттесетін барлық Xlib функцияларына арнаға қол жеткізу үшін осы құрылым қажет. Кейбір басқа функцияларға да осы құрылым қажет, тіпті олар жергілікті түрде жұмыс істесе де, себебі олар нақты арнаға қатысты деректермен жұмыс істейді. Мұндай операциялардың мысалы – төменде сипатталатын оқиға кезегімен жұмыс. Терезелер, түс схемалары және т.б. сервермен басқарылады, яғни олардың нақты іске асырылуына қатысты деректердің бәрі серверде сақталады. Клиент осы нысандармен олардың идентификаторларын пайдалану арқылы жұмыс істейді. Клиент нысанмен тікелей жұмыс істей алмайды, тек серверден нысанның идентификаторын көрсету арқылы операцияны орындауын сұрай алады. Windows, Pixmap, Font, Colormap және т.б. түрлері – барлығы 32 биттік бүтін сандар (X11 протоколы сияқты) болып табылатын идентификаторлар. Клиент серверден терезені құруды сұрау арқылы терезені «жасайды». Бұл терезенің идентификаторын, яғни нөмірді қайтаратын Xlib функциясын шақыру арқылы іске асырылады. Клиент осы идентификаторды сол терезенің басқа операцияларын серверден сұрау үшін пайдалана алады. Идентификаторлар сервер үшін бірегей болып табылады. Олардың көпшілігі әртүрлі қолданбалар бірдей нысандарға сілтеме жасау үшін пайдалана алады. Мысалы, бір серверге қосылған екі қолданба бір терезені атау үшін бірдей идентификаторды қолданады. Бұл екі қолданба екі түрлі арнаны пайдаланады, сондықтан екі түрлі құрылымға ие; алайда, олар бірдей идентификаторға операцияларды сұрағанда, бұл операциялар бір нысанмен орындалады.
Хаттама және іс-шаралар
Серверге сұрау салуларды жіберетін Xlib функциялары әдетте осы сұрау салуларды дереу жібермейді, оларды «сұрау буфері» деп аталатын буферде сақтайды. Бұл жағдайда «сұраныс» термині клиенттен серверге жіберілген сұранысқа қатысты: сұрау буферінде серверге жолданған кез келген сұраныстар болуы мүмкін, олар тек экранда көрінетін әсер бере бермейді. Сұрау буферінің тазартылуы (яғни, осы уақытқа дейін жасалған барлық сұраулар серверге жіберіледі) XSync немесе XFlush функцияларын шақырғаннан кейін, серверден мән қайтаратын функцияны шақырғаннан кейін (бұл функциялар жауап алынғанға дейін күтіп тұрады) және басқа да жағдайларда кепілдіріледі. Xlib алынған оқиғаларды кезекке сақтайды. Клиенттік қосымша кезектегі оқиғаларды қарап, алуға болады. X сервері оқиғаларды асинхронды түрде жіберсе, Xlib кітапханасын пайдаланатын қосымшалар кезектегі оқиғаларға қол жеткізу үшін Xlib функцияларын нақты шақыруы тиіс. Бұл функциялардың кейбіреулері күтіп тұруы мүмкін; осы жағдайда олар сұрау буферін де тазартады. Қателер асинхронды түрде қабылданады және өңделеді: қосымша серверден қате хабарлама келген кезде шақырылатын қателіктерді өңдеушіні ұсынуы мүмкін. Егер терезе немесе оның бір бөлігі көрінбейтін болса, терезенің мазмұны сақталуына кепілдік берілмейді. Бұл жағдайда, терезе немесе оның бір бөлігі қайтадан көрінетін болғанда, қосымшаға Expose оқиғасы жіберіледі. Содан кейін қосымша терезенің мазмұнын қайтадан салуы керек.