1 Windows桌面程序,界面和程序是源码级混合
Windows系统下的GUI程序,界面(GUI)与程序其他部分逻辑上是分离的,但是源码上直接交互,界面功能直接通过调用Win32 API来实现。
例:CreateWindow()。
写Windows桌面程序,必须调用GUI32.dll导出的API,无他可选。
甚至线程模型很多功能都和GUI窗口绑定到了一起,如消息队列。
2 Linux程序,界面和程序是通过协议通信
2.1 CUI程序和文本终端通过终端协议交互
对于CUI的程序来说,文本终端是通过标准的终端协议(行行程协议)来提供接口功能的。文本终端和主机完全可以运行在不同架构的机器上,只要彼此都遵守同样的终端通信协议,程序和终端就能完美交互,而不受通信媒介的限制。
正因为如此,才使得SSH等远程终端等方便的远程连接方式很容易被理解和实现。
这种彻底的分离,带来了设计上的完美感。
让每一个程序员都去了解使用终端协议是非常费时(个人认为非常有意义)的事情,而且更可怕的是终端协议并不是只有一个,各终端设备厂家有自己的协议扩展,如VT100。
为了便于使用,人们开发了封装终端协议的函数库。最基本的就是C标准函数库里的printf(),scanf()了。功能更强大的就是著名的curses库了。当我们编写Linux程序使用这些库函数的时候,最好能想到其底下支撑它的终端协议。