Windows(Win32 API)和 OS X (Cocoa)都有自己处理窗口、事件和其他操作系统事项的 API。 我从来没有真正得到一个清晰的答案,关于 Linux 的等价物是什么?
我听说过有些人说 GTK +,但是GTK+是跨平台的,它怎么能算是本地的呢?
Windows(Win32 API)和 OS X (Cocoa)都有自己处理窗口、事件和其他操作系统事项的 API。 我从来没有真正得到一个清晰的答案,关于 Linux 的等价物是什么?
我听说过有些人说 GTK +,但是GTK+是跨平台的,它怎么能算是本地的呢?
工具包库,例如GTK+(由GNOME使用)和Qt(由KDE使用),建立在Xlib之上,因为它们更容易进行编程。例如,它们为您提供了跨应用程序的一致的外观和感觉,使拖放更容易使用,提供了现代桌面环境的标准组件等。
X在屏幕上内部绘制取决于实现方式。X.org有一个与设备无关的部分和一个与设备相关的部分。前者管理屏幕资源,例如窗口,而后者与图形卡驱动程序通信,通常是内核模块。通信可以通过直接内存访问或通过系统调用到内核中进行。驱动程序将命令转换为硬件所理解的形式。
截至2013年,一个名为Wayland的新窗口系统开始变得可用,并且许多发行版表示他们最终会迁移到该系统,尽管目前还没有明确的时间表。该系统基于OpenGL/ES API,这意味着在未来,OpenGL将成为Linux中的“本地GUI API”。正在进行将GTK+和QT移植到Wayland的工作,以便当前流行的应用程序和桌面系统需要最少的更改。无法移植的应用程序将通过X11服务器支持,类似于OS X通过Xquartz支持X11应用程序。预计GTK+端口将在一年内完成,而Qt 5已经完全支持Wayland。Linux是一个内核,而不是完整的操作系统。有不同的窗口管理系统和图形用户界面在Linux上运行,以提供窗口化。通常Linux发行版使用的窗口管理系统是X11。
严格来说,Linux的API由其系统调用组成。这些是内核函数,可以被用户模式(非内核)程序调用。这是一种非常低级别的接口,允许程序执行诸如打开和读取文件之类的操作。详见http://en.wikipedia.org/wiki/System_call进行概括介绍。
真正的Linux系统还将有整个软件“堆栈”运行在其上,以提供图形用户界面和其他功能。该堆栈的每个元素都会提供自己的API。
我想问题更像是“Linux的本地GUI API是什么”。
在大多数情况下,会使用X(又称X11): http://en.wikipedia.org/wiki/X_Window_System.
您可以在此处找到API文档here
XWindows可能是最接近所谓“本地”的东西 :)
你可能已经听说过,Wayland 是如今许多发行版的首选,因为它的协议比 X 更简单。
Wayland 建议使用的工具包或 GUI 库有:
在Linux中,最接近Win32的应该是libc库,因为您提到的不仅仅是UI界面,还包括事件和其他操作系统相关的内容。
ioctl
这样的系统调用,则必须从sys/
中包含某些内容。 - AxelXlib
而不是 libc
。 - i486