Linux下文件管理与文件传送研究报告与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
Linux下文件管理与文件传送的研究与实现
摘要
Linux操作系统是现在流行的一种免费的操作系统,它完全符合POSIX标准,拥有强大的网络功能和良好的可移植性,系统的开发就是基于这个平台。
为了用户操作的方便,系统用QT来实现系统的用户界面,它是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司出品。
在研究了Linux文件系统及网络传输的原理基础上系统主要实现了对文件的管理,包括创建、删除、重命名、复制、移动和文件权限的修改的功能,以及对字符的搜索和对文件的网络传输。
关键词
Linux;QT;文件系统;网络传输;管理;搜索
Research and Implementation of File Management and File
Transfer
Abstract
Linux operating system is now a popular free operating system, it is in full compliance with the POSIX standard, has a strong network and good portability feature, my system is based on the development of this platform. In order to convenience users, the system used to achieve the QT system user interface, it is a cross-platform C + + graphical user interface library, produced by the Norwegian company TrollTech. After studying the Linux file system and network transmission system ,my system mainly realization of the management of files, including creation, deletion, rename, copy, move and modify file permissions of the function, as well as the characters in the document search and network transmission.
Key words
Linux。
QT。
file system。
network transmission。
search。
management
前言
Linux是unix操作系统的克隆,可以免费使用,遵循GPL声明,可以自由修改和传播。
可以说,与Windows等商业操作系统不同,Linux完全是一个自由的操作系统。
Linux内核是由Linus Torvalds和通过Inetrface组织起来的开发小组完成的。
Linux 包含了人们希望操作系统拥有的所有功能特性,这些功能包括真正的多任务,虚拟内存,世界上最快的TCP/IP驱动程序,共享库和多用户支持。
Linux在企业平台上的应用至少包括:电子商务,网络以及相关服务,企业内部管理协调应用,信息数据库应用。
Linux在桌面端的应用至少包括:网络客户端、个人机、手提笔记本电脑。
嵌入式技术具有广阔的应用前景,它可以渗透于人们生活和工作的诸多领域。
嵌入式应用对操作系统的要求主要是:功能专一高效、高度节约资源、启动速度快。
Linux的特点使得它天生就是一个适合于嵌入式开发和应用的操作系统。
由于多种原因,Linux在国内的推广比国外晚了几年,国内Linux发展还处于一个比较低的层次,初级入门用户很多,实际应用用户少。
而人事自由软件开发的人就更少了。
<马忠梅,2004)
1 Linux操作系统
1.1 Linux操作系统的产生及发展
在Linux的发展历程中,Unix和Minix扮演着十分重要的角色。
1990年,芬兰人Linus Torvalads在赫乐辛基大学接触到Unix,但是当时上机学习要排队等候很长的时间,所以Linus购买了自己的PC机,希望安装一个类似的操作系统。
由于Unix的内核代码不容易得到,所以他安装了Minix。
Minix是一个基于微内核技术的类似于Unix 的操作系统,是Andrew Tanebaum教授利用业余时间开发的用于教案的操作系统。
当时,Minix并不是完全免费的,而且Andrew Tanebaum教授不允许别人为Minix再加入其他东西,目的是为了教案的简明扼要。
在使用过程中,Linus受Minix的启发,决定开发一个自己的操作系统。
1991年,Linus需要一个简单的终端仿真程序来存取一个新闻组的内容,于是自己编写了一个程序来实现此目的。
用Linus自己的话说:“在这之后,开发工作可谓一帆风顺,尽管程序代码仍然千头万绪,但此时我已有一些设备,调试也相对较以前容易了。
在这一阶段我开始使用C语言编写代码,这使得开发工作加快了许多。
与此同时,我产生了一个大胆的梦想:制作一个比Minix更好的Minix。
”
基本开发工作持续两个月,直到有了一个磁盘驱动和一个小的文件系统。
1991年8月,Linus对外发布了一套新的操作系统,源代码放在芬兰最大的FTP网站上,并放在名为Linux的目录中,Linux也因此而得名。
与Minix不同,Linux不是一种公益软件,不是共享软件,它是一种自由,免费的软件!这里的“自由”更多体现在版权的方面,允许使用者随意更改系统,为系统加入任何功能。
也正是这种自由,使得它不断地发扬光大。
1991年10月5日,Linus宣布了Linux系统的第一个正式的版本,其版本号为
0.02。
此版本的Linux能够运行gun的bourne again shell—bash shell以及gun的编译器—gcc,但是应用程序还不多。
Linus是一个完全的理想主义者,他希望Linux是一个完全免费的操作系统。
1993年,Linux的第一个“产品”版1.0问世时,是按完全自由扩散版权进行扩散的。
它要求所有的源码必须公开,而且任何人均不得从Linux交易中获利。
同时,Linux给了用户充分的自由,它从一开始就连同源代码一起提供给服务用户,允许用户进行任何更改,增加任何功能。
Linus采用了一个比GPL还要严格的版权许可证以确保Linux内核是自由的。
但是,半年之后,他渐渐地发现这种纯粹自由软件的发行方式实际上限制了Linux的发行。
于是,Linus转身了GNU的GPL版权。
也正是由于采用了GPL版权,Linux今天才有如此多的发行版。
<薄晓蓉,2005)
要使Linux成为一个理想的操作系统,是一项十分巨大的工程。
Linus认识到单靠一个人的力量是不行的,它需要来自世界各地的编程专家共同努力。
因此任何人想往内核中加入新的特性,只要被认为是有用的,合理的。
Linus就允许加入。
就这样,Linux在来自世界各地的众的共同协作下发展了起来。
下面是Linux发展过程中的重要里程碑。
1990年,Linus Torvalad首次接触Minix;
1991年,Linus Torvalad开始在Minix上编写各种驱动程序等操作系统内核组件;
1991年,Linus Torvalad公开了Linux内核;
1993年,Linux 1.0版发行,Linux转向GPL版权协议;
1994年,Linux的第一个商业发行版式Slackware问世;
1996年,美国国家标准技术局的计算机系统实验室确认Linux版本1.2.13符合POSIX标准;
1997年,Linux的简体中文发行版相继问世;
2001年,Linux 2.4版内核发布;
2003年,Linux 2.6版内核发布;
1.2 Linux操作系统的特点
Linux作为一种流行的操作系统,在市场上占有越来越大的份额,很多人特别是程序员纷纷转向Linux,Linux逐渐成为Microsoft 的一个强劲对手。
Linux是类Unix的实现,具有强大的功能,很好地支持了各种现代编程技术,具有以下主要特点。
1.2.1自由开放软件
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码,这是其他的操作系统所做不到的。
正是由于这一点,来自全世界的无数程序员参与了Linux的修改,编写工作,程序员可以根据自己的兴趣和灵感对其进行改变。
这让Linux吸收了无数程序员的精华,不断壮大。
它开放源码并对外免费
提供,爱好者可以按照自己的需要自由修改,复制和发布程序的源码,并公布在Internet上。
<S.Balakrishnam,2003)
1.2.2 真正的多任务多用户
Linux充分利用了x86 CPU的任务切换机制,实现了真正多任务,多用户环境,允许多个用户同时执行不同的程序,并且可以给紧急任务以较高的优先级。
多任务是现代主要的一个特点,它指计算机同时执行多个程序,而且各个程序的运行互相独立。
Linux系统调度每一个进程平等地使用CPU。
由于CPU的处理速度非常快,各个被启动执行的程序看起来好像在并行运行。
事实上,从CPU执行一个程序中的一组指令到Linux调度CPU两次运行这个程序之间有很短的时间延迟,但用户是感觉不到的。
1.2.3 UNIX的完整实现
从发展的背景看,Linux与其他操作系统有着明显的区别。
Linux是从一个比较成熟的操作系统Unix发展而来的,Unix上绝大多数命令都可以在Linux里找到并有所加强。
可以认为它是Unix系统的一个变种,因而Unix的优良特点<如可靠性,稳定性,强大的网络功能,强大的数据库支持能力以及良好的开放性等)都在Linux上一一体现出来。
同时在Linux的发展过程中。
Linux的用户能够直接使用与Unix相关的支持和帮助。
1.2.4完全符合POSIX标准
POSIX是基于Unix的第一个操作系统簇国际标准。
Linux遵循这一标准,使得Unix下许多应用程序可以很容易地移植到Linux下,相反也是如此。
Linux完全兼容POSIX 1.0标准,可以在Linux下通过相应的模拟器运行常见的DOS,Windows程序。
这为用户从Windows转到Linux奠定了基础。
1.2.5良好的用户界面
Linux向用户提供了两种界面:用户界面和系统调用。
Linux的传统用户界面是基于命令行的界面。
即Unix系统的Shell界面,它既可以联机实时逐条输入执行,也可以存入文件后提交系统批量自动执行。
Shell有很强的设计能力,用户可以方便地用它编制程序,从而为用户扩充系统功能提供更高级的手段。
可编程Shell是指将多条命令组合在一起,形成一个Shell程序。
这个程序可以单独运行,也可以与其他程序同时运行。
Linux的系统调用界面是供用户编程时使用的,用户可以在编程时直接使用系统提供的系统调用命令。
另外,Linux通过使用鼠、菜单、窗口和滚动条还为用户提供了一个直观,易操作及交互性强大的图形化界面。
1.2.6 强大的网络功能
互联网是在Unix的基础上繁荣起来的,Linux的网络功能当然不会逊色。
Linux的网络功能和其内核紧密相连,在这方面Linux要优于其他操作系统。
在Linux中,用户可以轻松实现网页浏览,文件传输,远程登录等网络工作。
Linux强大的网络功能首先体现在对Internet的使用的支持。
Linux免费提供了大量支持Internet的软件。
用户能够用Linux与世界上其他人进行通信。
Linux强大的网络功能还体现在文件传输能力上。
用户能通过一些Linux命令完成内部信息或文件的传输。
远程访问也是Linux系统提供的重要网络功能,Linux不仅允许通过网络进行广播电台程序的传输,还为系统管理员和技术人员提供了通过网络访问其他系统的窗口。
借助这各远程访问的能力,无论系统在地理上位于休息技术人员都能够有效地为多个远程系统服务。
<谢希仁,2008)
Linux不仅能够作为网络工作站使用还可以作为服务器提供WWW、FTP、EMail 等服务。
1.2.7 良好的可移植性
可移植性是指将操作系统从一种计算机硬件平台转移到另一种计算机硬件平台后,仍然能够按其自身方式运行的能力。
Linux是一种可移植的操作系统,能够在从微型到大型的任何环境和任何平台上运行。
可移植性为运行Linux系统的计算机平台与其他计算机进行准确而有效的通信提供了手段,而不需要另外增加特殊的通信接口。
Linux可以运行在多种硬件平台上。
如具有x86、680x0、SPARC、ALPHA等处理器的平台。
同时Linux还支持多处理器技术、多个处理器同时工作,从而使系统性能大大的提高。
此外,Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。
2001年1月发布的Linux2.4版内核已经能够完全支持Inter64位芯片架构。
1.2.8设备独立性
设备独立性是指操作系统把所有外部设备统一当作文件看待,只要安装了它们的驱动程序,任何用户都可以像使用文件一样操纵,使用这些设备,而不必知道它们的具体形式设备独立性的关键在于内核的适应能力。
其他操作系统只允许一定数量或一定种类的外部设备连接。
而具有设备独立性的操作系统能够容纳任意种类及任意数量的设备,因为每一个设备老师通过与内核的专用连接独立进行访问。
Linux量具有设备独立性的操作系统,它的内核具有高度适应能力。
随着更多的程序员加入Linux编程,会胡更多硬件设备加入到各种Linux内核和发行版本中。
别处,由于用户可以免费得到Linux的内核源代码,因此用户可以修改内核源代码,以便适应新增加的外部设备。
2界面设计工具——QT
2.1 QT发展历史
Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司出品,目前包括Qt,基于 Framebuffer 的Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist 等部分 Qt 支持所有 Unix 系统,当然也包括 Linux,还支持 WinNT/Win2k,Win95/98 平台。
<蔡志明,2008)
Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序员就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995 年推出然后 Qt 的发展就很快了,下面是 Qt 发展史上的一些里程碑:
1996 Oct KDE 组织成立
1998 Apr 05 Trolltech 的程序员在 5 天之内将 Netscape5.0 从 Motif 移植到 Qt 上
1998 Apr 08 KDE Free Qt 基金会成立
1998 Jul 09 Qt 1.40 发布
1998 Jul 12 KDE 1.0 发布
1999 Mar 04 QPL 1.0 发布
1999 Mar 12 Qt 1.44 发布
1999 Jun 25 Qt 2.0 发布
1999 Sep 13 KDE 1.1.2 发布
2000 Mar 20 嵌入式 Qt 发布
2000 Sep 06 Qt 2.2 发布
2000 Oct 05 Qt 2.2.1 发布
2000 Oct 30 Qt/Embedded 开始使用 GPL 宣言
2000 Sep 04 Qt free edition 开始使用 GPL
2.2 QT优点
基本上,Qt 同X Window 上的Motif、Openwin、GTK 等图形界面库和Windows 台上的 MFC、OWL、VCL、ATL 是同类型的东西,但是 Qt 具有下列优点。
2.2.1 优良的跨平台特性
Qt支持下列操作系统: Microsoft Windows 95/98、 Microsoft Windows NT、Linux、Solaris、SunOS、HP-UX、Digital UNIX (OSF/1, Tru64>、 Irix,FreeBSD、BSD/OS、SCO、AIX、 OS390、QNX 等等。
2.2.2 面向对象
Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt 提供了一种称为 signals/slots 的安全类型来替callback,这使得各个元件之间的协同工作变得十分简单。
2.2.3丰富的 API
Qt 包括多达250 个以上的C++ 类,还替供基于模板的collectionsserialization、file、I/O device、directory management、date/time 类。
甚至还包括正则表达式的处理功能。
<1)支持 2D/3D 图形渲染,支持 OpenGL。
<2)大量的开发文档。
<3)XML 支持。
2.3 KDE 和GNOME
但是真正使得Qt在自由软件界的众多Widgets<如Lesstif、Gtk、EZWGL、Xforms、fltk 等等)中脱颖而出的还是基于Qt的重量级软件KDE。
有趣的是,KDE 也是使得Trolltech 公司承受巨大压力的一个原因。
下面我们将来看看这场著名的自由软件圣战 -- "KDE/QT .VS. Gnome/Gtk" 是怎么发生的。
在 Unix 的图形界面一向是以 MIT 的 X Window 系统为标准,可是在商业应用上有两大流派,一派是以Sun 公司领导的Openlook 阵营,一派是IBM/HP领导的OSF (Open Software Foundation> 的 Motif,双方经过多年竞争之后, Motif 最终胜出,成为最普遍使用的界面库,后来双方又妥协出一个 CDE(Common Desktop Enviroment> 作为一个标准的图形界面。
但是Motif/CDER 的价格非常昂贵,在这同时微软的Windows 图形界面发展速度非常快,而 Unix 界的后起之秀 Linux 也急需一个可靠并且免费的图形界面。
1996年10月,由开发图形排版工具Lyx的德国人Matthias Ettrich 发起了KDE 计划。
KDE 的全称为 K Desktop Environment,可以看出是针对 CDE。
KDE 本身是采用GPL 宣言的,但是 KDE 却是使用 Qt 来作为其底层库,因为当时 Qt 已经将其 Unix 版本自由发布了,但是 Qt 并不遵循 GPL,因此 KDE 被很多自由软件的作者攻击,认为利用非自由软件开发违背了 GPL 的精神,于是 GNU 的狂热信徒兵分两路,一路是去制作 Harmonny,试图重写一套兼容于 Qt 的替代品,另一路是由一个 26 岁的墨西哥程序员 Miguel De Icaza 领导下重新开发一套叫 GNOME(GNU Network Object Enviroment>来替代 KDE。
由于 Linux 界的老大RedHat不喜欢KDE/Qt的版权,因此 RedHat 甚至专门派出了几个全职程序员来加入 GNOME 进行开发工作,于是一场同 Motif VS Openlook 相似的圣战就这么打起来了。
Trolltech 为了 KDE 曾数次修改 Qt 的版权,从成立 KDE Free Qt 基金会到采用QPL,可谓是费尽心机,但是GNOME采用的GTK一开始就是完全的GPL,因此在这个方面 GNOME 有一定的优势,加上 Qt/KDE 采用 C++ 开发,入门的门槛比较高,而 GTK/Gnome 采用 C,因此 GNOME 吸引了更多的自由软件开发者,但是KDE 毕竟先走了一步,推出的KDE1.1.2 十分稳定,而当时急忙中推出的GNOME1.0 的系统稳定性奇差,有人甚至笑称GNOME1.0 还没有KDE 1.0 Alpha 稳定。
但是GNOME 后来发展比较快,大有迎头赶上的势头。
当时双方的开发者在网络上炒得天翻地覆,连 Linux 之父 Linus 只是说了一句喜欢用 KDE 都倍受指责。
战争到了第三个年头,也就是2000年,可谓是风云突变,一个接一个重大的事件先后发生:首先是一批从Apple 公司出来的工程师成立了一个叫Eazel 的公司替GNOME 设计界面,然后是一批GNOME 程序员成立了一个Helix Code公司替GNOME 提供商业支持,而大家期待以久的KDE 2.0 也终于发布了,这恐怕是目前最为庞大的自由软件了之一,除了 KDE 本身,还包括 Koffice 套件,Kdevelop 等等大批软件,其主力软件 Kounqueror 也是第一个可以同微软的 Internet Exploer 相抗衡的浏览
器。
而Sun 公司,Red Hat公司,Eazel 公司,Helix Code 等一批公司成立了一个GNOME 基金会,Sun 还宣布将把重量级办公软件Star office 同GNOME 集成,Trolltech 公司自然不能坐以待毙,于今年10月4日将Qt 的free edition 变为GPL 宣言,彻底解决了 KDE 的版权问题,又推出了嵌入式 Qt ,给了 GNOME 阵营一个有力的回击。
到现在为止,这场战争还在继续,相信我们不能很快看到结果。
一般说来,目前 GNOME 吸引的公司比较多,但是 KDE/Qt 的开发的效率和质量比 GNOME 高,而且在Office/嵌入式环境中先走一步,在一定时间内还将处于优势地位。
<W.Richard Stevens,Stephen A.Rago,2003)
2.4 QT的安装
2.4.1 获取源代码
可以从Trolltech公司的FTP服务器下载,地址:ftp:///qt/source。
选择qt-x11-opensourec-src-4.3.2.tar.gz最新的QT源代码包。
2.4.2 解压缩
将下载的源代码包解压缩到用户目录,操作如下:
tar xvfz qt-x11-opensourec-src-4.3.2.tar.gz
Qt源码可以用普通用户身份编译,但安装到默认的/usr/local/Trolltech目录时则需要root用户权限。
2.4.3 生成Makefile
运行./configure。
2.4.4编译
配置成功后,直接键入“make”即可编译。
编译时间视具体机器配置不同而不同,大约需要1个小时。
<杨建新,2006)
2.4.5 安装
编译完成后,直接输入:
Make install
就可以将QT安装到默认的/usr/local/Trolltech/Qt-4.3.2目录中。
2.4.6 编程环境的设置
为了能方便地使用QT,可以在用户的shell启动文件中设置相应的环境变量。
如
果用户使用的shell是bash,则可以在.bash_profile中加入:
export QTDIR=/usr/local/Trolltech/QT-4.3.2
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
2.5 QT信号与槽机制
信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解。
信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别
于其它工具包的重要地方。
信号和槽是QT自行定义的一种通信机制,它独立于标准的C/C++语言,因此要正确的处理信号和槽,必须借助一个称为moc(Meta Object Compiler>的QT工具,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。
在我们所熟知的很多GUI工具包中,窗口小部件(widget>都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。
但是,在QT中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。
信号和槽能携带任意数量和任意类型的参数,他们是类型完全安全的,不会像回调函数那样产生core dumps。
所有从QObject或其子类<例如Qwidget)派生的类都能够包含信号和槽。
当对象改变其状态时,信号就由该对象发射(emit>出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。
这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。
槽用于接收信号,但它们是普通的对象成员函数。
一个槽并不知道是否有任何信号与自己相连接。
而且,对象并不了解具体的通信机制。
<trolltech,2005)
你可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。
总之,信号与槽构造了一个强大的部件编程机制。
<Jasmin Blanchette,1998)
当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。
只有定义过这个信号的类及其派生类能够发射这个信号。
当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。
信号-槽机制完全独立于任何GUI事件循环。
只有当所有的槽返回以后发射函数(emit>才返回。
如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪个后执行。
信号的声明是在头文件中进行的,QT的signals关键字指出进入了信号声明区,随后即可声明自己的信号。
槽是普通的C++成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。
当与其关联的信号被发射时,这个槽就会被调用。
槽可以有参数,但槽的参数不能有缺省值。
既然槽是普通的成员函数,因此与其它的函数一样,它们也有存取权限。
槽的存取权限决定了谁能够与其相关联。
同普通的C++成员函数一样,槽函数也分为三种类型,即public slots、private slots和protected slots。
public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。
这对于组件编程非常有用,你可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能够正确的传递。
protected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。
这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。
private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。
这适用于联系非常紧密的类。
槽也能够声明为虚函数,这也是非常有用的。
槽的声明也是在头文件中进行的。
通过调用QObject对象的connect函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。
该函数的定义如下:bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member > [static] 。
这个函数的作用就是将发射者sender对象中的信号signal与接收者receiver中的member槽函数联系起来。
当指定信号signal时必须使用QT的宏SIGNAL(>,当指定槽函数时必须使用宏SLOT(>。
如果发射者与接收者属于同一个对象的话,那么在connect调用中接收者参数可以省略。
元对象编译器moc(meta object compiler>对C++文件中的类声明进行分析并产生用于初始化元的C++代码,元对象包含全部信号和槽的名字以及指向这些函数的指针。
moc读C++源文件,如果发现有Q_OBJECT宏声明的类,它就会生成另外一个C++源文件,这个新生成的文件中包含有该类的元对象代码。
例如,假设我们有一个头文件mysignal.h,在这个文件中包含有信号或槽的声明,那么在编译之前moc 工具就会根据该文件自动生成一个名为mysignal.moc.h的C++源文件并将其提交给编译器;类似地,对应于mysignal.cpp文件moc工具将自动生成一个名为mysignal.moc.cpp文件提交给编译器。
元对象代码是signal/slot机制所必须的。
用moc产生的C++源文件必须与类实现一起进行编译和连接,或者用#include语句将其包含到类的源文件中。
moc并不扩展#include或者#define宏定义,它只是简单的跳过所遇到的任何预处理指令。
3Linux虚拟文件系统
3.1 虚拟文件系统概述
Linux成功的关键因素之一是它具有与其他操作系统和谐共存的能力。
你能够透明地安装具有其他操作系统文件格式的磁盘或分区,这些操作系统如Windows,其他版本的Unix,甚至像Amiga那样的市场占有率很低的系统。
通过所谓的虚拟文件系统概念,Linux使用与其他Unix变体相同的方式支持多种文件系统类型。
虚拟文件系统所隐含的思想是把表示很多不同种类文件系统的共同信息放入内核。
其中有一个字段或函数来支持Linux所支持的所有实际文件系统所提供的任何操作。
对所调用的每个读写或其他函数,内核都能把它们替换成支持本地Linux文件系统,NTFS文件系统,或者文件所在的任何其他文件系统的实际函数。