Xlib 基础概念

1.1 一个Display 包含了一个或者多个Screen, 是一个集合了键盘,鼠标和一个或多个Screen 的工作站。

1.2  X协议(X protocol)是X 客户程序和服务器进行通信的一套协定,X 协议支持网络,能在本地系统中和网络实现这个协议,支持的网络协议有TCP/IP, DECnet等。

1.3  XServer 是控制每个Display 的程序,一个XServer 可以允许XClient 对Display 的访问、解释来自XClient 的网络数据、通过网络数据将用户输入发送给XClient、绘制二维图形和保存一些复杂数据结构(windows, cursors, fonts and "graphics context")并把这些储存为Resource 以便在XClient 之间共享。一台计算机可以跑若干个XServer,每个XServer 又连接到一个或者多个Display。

1.4 XClient 是使用到XWindow 系统功能的应用程序,它是XServer 的客户,要求XServer 回应它的请求来完成相应动作(XClient本 身无法控制Display)。

1.5  XWindow 系统的Server-Client 模型:和普通网络中的Server-Client 模型一样,但是模型的对象都是进程而非使用者。用户通过XServer 来对Display 进行操作,而XClient 可以运行在本地或者远程计算机上。就是说Server 有控制目标硬件的能力,而Client 只能执行程序,必须通过Server 才能实现输入输出。这种模型增强了可移植性,且XClient 可以运行在任何可能的设备上,发挥了网络的威力。


6. 窗口管理器(WM)是一个普通的XClient,和其他XClient 运行在同一主机上并且共享一个XServer。 WM 和普通的 XClient 最大的区别就是在调用 XCreateWindow () 时,需要将最后一个参数 XSetWindowAttributes *attributes 中的 Bool override_redirect 设置为true,这样以后XServer 执行其它 XClient 调用的 XCreateWindow () 请求时就会将请求重定向到设置了 override_redirect 的 XClient, 也就是窗口管理器进程,窗口管理器进程则为这个窗口创建一个父窗口,也就是边框窗口。WM 只有“权利”而没有“责任”,程序必须拥有和任何WM合作的能力,而WM 不用考虑和程序的协作问题。

2.1 经由X 协议(X Protocol)的数据包有4 种:request、reply、event 和error {

        2.1.1 request 由Xlib 发送至XServer,可以包含多种信息。但是request 只会影响Xlib 的局部数据结构,并不会影响到XServer。

        2.1.2 reply 由XServer 发送至Xlib,作为request 的回应而发送。只有要求得到信息的request 才会得到一个reply。当Xlib 得到一个reply 后,请求的数据会被放入参数或者产生request 的Xlib 函数的返回值中(places the requested data into the arguments or returned value of the Xlib routine that generated the request)。一个要求得到reply 的Xlib 函数叫做round-trip request ——它应当被尽力避免,在有网络延迟的情况下round-trip request 的性能可不怎么高。

         2.1.3 event 由XServer 发送至Xlib,包含了一个设备操作或者是先前一个request 的副作用(a side effect)。其中的数据五花八门——因为event是由XClient获取信息的主要方法。Xlib 中用队列储存events,XClient 可以一次读取一个。XServer 发送至 XClient 的events 的类型范围由XClient 指定。

         2.1.4 error 由XServer 发送至Xlib,用于告知XClient 上一个request 无效。error 会被Xlib 中的错误处理函数处理——可以被XClient 指定的错误处理函数取代。

}


2.2 Xlib 会对request 进行缓存(Buffering)而非立刻发送给XServer。在下面的三种情况下,缓存会被发送 {

        A XClient 调用Xlib 函数来等待一个event,但是Xlib 中的request 队列中没有目前可用的匹配event。

        B 在程序继续之前,一个从XServer 得到信息的Xlib 调用要求得到一个reply。

        C XClient 希望手动刷新缓存。

}     



fsadfsa












  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值