Windows 文件系统操作之一[前言]

来源:互联网 发布:万达电商 玩数据百家 编辑:程序博客网 时间:2024/05/21 03:24
     我们知道操作系统主要负责管理各种资源,分四大模块,处理机管理、存储器管理、设备管理、文件管理。在上一个系列我们初步窥探了一下Windows环境下操作系统为我们程序员提供的内存管理接口。而本系列将介绍操作系统提供的文件管理接口。在正式介绍之前,我们来看看软件开发中的一个现象。
    我们知道计算机无非在做一件事情,无论它如何复杂和精细。那就是解释和操作二进制数据。无论计算机里呈现的数据多么精彩而复杂到头来存放到磁盘里去后就都是些零一零一之类的东西了。计算机能将那些看似无意义的比特流呈现出缤纷的虚拟世界靠的是什么呢?无非就是程序。是由程序来解释数据。也是由于程序的存在,它在物理数据上提供了更多的抽象,更多的数据类型和屏蔽掉一些复杂琐碎无聊的事情。
    现代高级语言提供了丰富的数据类型其功劳莫过于越来越复杂的编译系统和运行系统。当我们立足的抽象离硬件越远,离问题域越近,我们拥有的数据类型越多,越丰富,越复杂。随着人们对软件需求的不断增长,为了应付软件规模自身的复杂性,我们需要将抽象分层来。当我们讨论一个合理的系统架构的时,我们总会发现那些典型系统的代表都呈现一种合的层次结构。开放系统互联模型想必大家都很熟悉了,软件开发中这种层次性遍布系统的各个部分。我们始终相信建立在严格测试和经历时间考验的构件上的软件部分是可靠的。当我们在“正确”层面上开发新的应用时,我们没有必要去过分怀疑我们脚下坚实的土地,我们更应该花精力在我们自己的问题上。这样我们能更高效快速的开发出可靠的应用程序。
    于是站在软件系统的不同层面上,我们总能有一部分来自更低层次的部件,或称之为功能部件,基础部件。它或许是一个系统调用,一个对象,一个接口,甚至就是一个应用程序。如此,大家会发现一个问题,我们做软件开发似乎只是在集成一些这种基础构件。我们自己会开发一些功能模块,但开发的目的也是为了集成。这就是现代软件开发的方式,只是随着网络环境的发展,这种功能构件逐渐移向网络环境,于是有了Google和其他基础软件提供商鼓吹的“云计算”。是的,无论这些功能模块以如何方式呈现,我们都只是在集成。而事实上,开发基础部件很复杂,处理业务逻辑组合这些部件同样困难。
     立足于系统开发程序员的观点,开发基础部件很重要。原因很简单,基础软件构件往往是系统的核心或更本技术。比如,大家对遨游这款浏览器不陌生吧,但谁也都知道它用的是IE的内核,它没有自己的浏览器专利技术。它做得再好,再成功也是建立在IE内核的基础上,总是美中不足。冲其量就是个不错的二次开发作品。而相比之下火狐就有自己独到的基础技术,于是挑起了当前这场红红火火的浏览器战争,跟IE打得热火朝天。通过这个对比我们不能发现,开发基础技术构件就是我们真正学计算机,我们计算机专业人员应该干的事情。我们应该想着如何开发Photoshop,而不是如何去使用;如何开发数据库管理系统而不是如何使用数据库(当然掌握数据库技术是相当重要的啦。);如何开发高性能3D引擎,而不是沉溺于他国的先进API。是的,这就是我一直以来的态度,学习计算机就是要想办法开发出属于我们自己的平台。
    回到我们的Windows环境下,我们将要观察的是Windows平台上如何操作它提供的文件系统。它所暴露出的系统调用API就是我们的基础构件,我将将它们简单包装一下,开发出一个个简单易用的C++类。这就是一种集成。熟悉操作系统,熟悉基础技术相信是我们每一个学习计算机的人必须经历的阶段吧。在能够开发出我们自己的平台之前不妨看看人家成功的经验。当然这对如何开发另一个Windows的帮助是极小的。真正核心的源代码都秘密的保存在微软公司某处吧。但这是我们需要经历的一个阶段。
    好了,我们看看立足于操作系统层面和立足于那些大型类库或更加高级的开发系统有什么不同。前面不是很明白的说了,很多人都在做集成不是吗?于是用高阶技术与低阶技术有区别吗?反正我们的目的就很简单,就是开发满足业务需求的软件应用,如果所有业务模块都有了,我只拼拼凑凑那就再好不过了,不是吗?于是有个问题来了,那些业务模块谁开发,业务模块的子模块谁开发,那些子模块所依赖的平台,类库谁开发;那些平台和类库所依赖的操作系统环境谁开发,硬件谁去做。无论哪个环节,都有许许多多的人在从事不是吗?那么作为系统软件程序员的我们该如何摆放自己的位置呢?
    我相信让他人抓着自己的灵魂,带着镣铐跳舞是一件痛苦的事情。我同样能够想象到那些所谓某一技术领域的高手是多么痛苦,新的技术标准,新的技术构思层出不穷,于是自己不断的学习,并以此卖弄自己是MVP之类。为什么这些游戏规则不是我们自己做?为什么你只满足于当一个高级用户。真正的程序员应该有属于自己的平台。当然,我以上的观点有些过激了,但我希望那些真正热爱程序的人去思考思考。我真的希望我在我们自己的平台上是个白痴,也不想只做他人平台上一个优秀的客户。这当然有很多艰难,很多困难要克服。那请我们时刻告诫自己,终有一天,我们要开发出属于我们的平台,这个游戏规则的制定我也要参与。
    好了,好了。有朋友不耐烦了不是吗?我的很多想法不就像初出茅庐的野小子的狂妄不是吗?的确如此。现在的我很矛盾,我太沉迷于微软的很多技术。而且想尽快学习,我需要一份工作,我需要生存下去。我必须工作,必须有可以实用的技能。在商业界和工业界,一个小小的程序员算什么(在我们中国尤其如此,不是吗)?或许这才是抑制我们大胆研究基础技术的原因吧。但我始终相信,你选择了做程序员,你就有一颗永远不甘只做一个最终用户的心。那就请我们一起努力吧,让世界知道我们中国程序员的无限创造力。我也将努力接近自己最初的梦想。
    那就看看我们这个系列将要接触的一些话题吧:先是Windows文件系统的整体概述,然后是驱动器信息的操作;目录信息的操作;最后是文件信息的操作。当然这里并没有打算讨论文件的创建,读写等。我们讨论的中心是文件系统信息的操作。最后我会简单封装一下C语言的文件操作作为附录参考,当然上一系列欠缺的虚拟内存的简单操作也会作为附录补上。
    还是同样的提醒,这是一个简单的介绍,希望能激发你对Windows下相关技术的兴趣,帮助你开始对WIndows的学习。具体的学习请参考我提供的参考书目以及其他书籍。当然错误和疏漏在所难免,请发表评论。让我们大家一起讨论,学习,进步。
    下一节,Windows文件系统概述。
此教程来源于97xxoo教程网(www.97xxoo.org)查看完整的教程请点:http://www.97xxoo.org/article/4/2008/20081020071.shtml
原创粉丝点击