与内核交互的单独项目提供了系统的高级别功能。GNU用户区(useland)是大多数基于Linux系统的重要组成部分,它提供了最多的C库的常用实现,比如shell和一些其他的Unix工具。这些工具可以处理一些基本任务。
基于Linux的系统可以用命令行(CLI)、图形界面(GUI通常也是系统的默认设置)等方式进行控制,在嵌入式设备上,也可以用设备本身的控制器进行控制。
在桌面系统上,虽然存在很多图形用户界面,但Gnome、Kde和Xfe是其中最流行的。大多数流行的用户界面运行于X Window系统之上,它提供了网络透明性,可以让一台机器上的图形界面来控制另一台机器上运行的程序。当然,它也可以控制本机上的程序。这就是Linux图形用户界面的事项策略。也就是说,天生就考虑了远程控制。用远程控制的思想来操纵本机上的程序,这对于Linux在大规模集群中的应用非常重要。
2.2 Linux下编程
大多数Linux发行版本支持几十种编程语言。对于Linux用户程序和Linux操作系统本身来说,最常用的工具是同样的工具链,它包括GNU编译器集合(GNU Complier Collection ,Gcc)和GNU build system。Linux内核本身就是用Gcc编译的。
Gcc支持的语言非常广泛,其中就包括Ada、C、C++、Java和Fortan,最重要的是C。Gcc的原名叫做GNU C Complier,是Richard Stallamn专门为C语言开发的自由编译器。
大多数发行版也包括了对Perl、Ruby、ython等动态语言的支持,还支持一些不大广泛使用的语言。
许多Java虚拟机和开发包也可以再Linux上使用,包括原版的SunMicrosystem JVM(HotSpot),以及IBM的J2SE RE,还有很多开源的项目例如Kaffe。[1]
两个开发图形用户界面程序的主要框架式GNOME和KDE。这两个项目分别基于GTK和Qt widget toolkits.GTK和Qt widget toolkits也可以单独使用,这两种框架都支持多种开发语言。[2]
2.3 Qt的信号与槽机制
Qt是一个跨平台的C++应用程序和UI开发框架框架。它是由奇趣科技公司开发出来的,在2008年6月份被NOKIA公司收购。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能,在这里不得不提一下Qt的成就:Matthias Ettrich使用Qt作为底层库开发出了KDE。Qt同X Window上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL是同一类的东西。但相比较而言,Qt具有的优点是十分明显的,譬如面向对象。
Qt的面向对象使Qt具有良好的封装机制,使得Qt的模块化程度非常高,更为重要的是Qt提供了信号与槽(Signal/Slot)机制来代替回调函数。当某个事件出现时,通过发送信号,可以将与之相关联的槽函数激活,即执行槽函数代码。信号与槽的关联是通过QObject::connect()函数进行的。[3-6]
例如:
Connect(pushButton,SIGNAL(clicked()),this,SLOT(doPushButton()));
这句的含义是:将按钮对象pushButton的信号clicked()与窗体中的doPushButton()槽函数相关联,这样在单击按钮时发送clicked()信号,通过Qt的信号与槽机制使doPushButton()函数激活,使函数得到执行。
利用信号与槽机制具有以下优点:
类型安全。需要关联的信号和槽的签名必须相同。即信号的参数类型和参数个数与接受该信号的槽的参数类型和个数必须相同。
松散耦合。激发信号的Qt对象无需知道是哪个对象的哪个槽需要接收它发出的信号
信号和槽机制是Qt的核心之一,在本文的代码中多次用到这个信号与槽关联。
由于是实现音频CD的播放,因此有理由介绍一下音频CD和Linux的设备控制。 Linux环境下CD播放器的设计与实现(3):http://www.751com.cn/jisuanji/lunwen_7816.html