Symbian OS高级开发篇之文件服务器

Symbian OS通过文件系统来管理数据的存储,程序访问磁盘和文件系统

由文件服务器来管理。文件服务器很灵活,可以使用不同的文件系统格式以及物理存储介质,应用程序及一些服务程序通过文件服务器客户端API

来访问文件、目录和磁盘。

 

在手机中,不同的存储介质使用不同的文件系统来组织文件。Symbian OS提供了很多类型的文件系统。通过文件系统插件,你可以实现一个新的文件系统。你还可以实现一个DLL用以扩展文件服务器,从而改变文件系统的行为。

 

前面(http://blog.csdn.net/pursuer_zhao/archive/2009/03/07/3966912.aspx)讲过,Kernel中的启动器(EKern.exe)来加载EFile.exe程序,从而启动文件服务器,文件服务器的配置如哪个磁盘对应哪个文件系统,都在Kernel的配置文件中配置。

 

文件服务器

和其他的软件系统一样,Symbian OS通过文件系统和文件实现数据保存,即使系统关闭,下次启动后仍然可以使用。

 

PC中,文件保存在磁盘或光盘中,而在手机系统中,文件一般存放在NANDNOR闪存中,或者MMCMultiMedia Card)、SD(Secure Digital card)CF(Compact flash)中。至于一些基本的概念像驱动器、卷标、目录结构、文件名及文件扩展名,与其他操作系统是一样的。

 

在手机中ROM存放在Z盘,CR盘通常预留为本地盘,另外还有一个约定,一般将C盘作为系统盘,D盘和E盘为移动盘,当然,手机制造商可以不遵循这个约定而自己决定。

 

Symbian OS中,文件是通用资源,像Symbian OS中其他通用或共享资源一样,由服务程序来提供相应的服务,文件由文件服务器来处理。应用程序及其他软件对文件、目录及磁盘的请求由文件服务器客户端API来实现。文件服务器是多线程的,允许对不同的逻辑磁盘并发处理。文件系统提供的服务基本分为两类,一是通过RFileRDirRFormat这些类访问单独的文件、目录和磁盘,另一个是通过CFileMan类来对文件进行移动、复制和删除操作;通过CDirScan类对目录进行扫描;通过MFileManObserve类来跟踪文件操作的进度。

 

处于安全性考虑,手机中的部分目录应用程序在访问时是受限制的。这就是所谓的数据锁(data caging)概念。对于数据的访问有一下原则:

  • 可执行程序和数据分离。可执行程序只能位于/sys/bin目录下,除非应用程序具有相应的权限,否则/sys/bin目录是不可见的。访问系统服务的权限被分为多个不同的许可,哪些可以授予应用程序,由Symbian Signed来定。

 

  • 应用程序有各自的私有目录/private/<程序SID>,在这个目录里,应用程序可以自由地进行文件读写操作以及创建下一级目录。程序SID就是所谓的安全标识符,通常用来确认可执行程序访问系统资源的权限。在这里用这个ID生成程序的私有目录。每个程序自己的私有目录,其他程序不能访问。
  • 所有应用程序可以对/resource/目录进行读操作,但没有写权限。这个文件夹通常存放只读文件。
  • 所有其他目录都是可读写的。

Symbian OS中可以将一个打开的文件从一个进程传递到另一进程,或者从客户端传到服务端,而在目的端不用知道完整的文件路径名即可对文件进行访问。

 

Symbian OS中,文件系统以插件形式在文件服务器端构建,这就意味着文件服务器本身是独立于文件格式的,也意味着手机制造商可以添加自己的文件系统。但ROM例外,在文件服务器中已经内建了ROM文件系统。驱动器在使用之前必须先挂接文件系统,这就是所谓的mounting,在系统引导时进行。实际应用中,程序无需考虑自己所在的文件系统。

 

文件服务客户端

 

文件服务客户端提供了文件系统操作的类。其中包括:

文件服务会话类RFs,在对文件系统操作前,客户端必须先通过这个会话类连接到文件服务器;

文件操作类RFile,这个类用于创建、打开和替换文件。

目录读取类RDir/CDir, 用来读取目录,从而可以显示。

文件管理类CFileMan,用来进行复制、移动及其他的文件操作。

文件查找类TFindFile及目录扫描类CDirScan

 

这些类的使用都比较简单,查看帮助文件就可以,不用再赘述了。

 

文件服务器插件

 

文件服务器插件框架为开发人员提供了一个扩展Symbian OS文件服务器功能的途径。开发者可以实现插件用来处理文件和目录。文件服务器插件有两类,一是监控插件,这类插件截获文件操作请求,但不对数据作修改,主要应用在病毒扫描、记录文件操作日志;另一类是可修改插件,这类插件截获文件操作请求,并对文件或目录数据作修改,主要用于压缩加密等。

 

从下图可以看出文件服务器插进在Symbian OS 系统中的位置层次。

 

Symbian os 文件操作请求路线

 

 

                                     1 文件服务器插件部署图(来自:SDL

 

 

Symbian OS 文件服务器是多线程的。每个驱动器有一个线程,其中有一主线程用来接收来自客户端的请求,并将这些请求发送到驱动器线程。每个插件也有自己处理请求的线程,请求在分发到驱动器线程之前会先被分发到插件的线程,插件对文件操作请求的截获分为操作前截获和操作后截获。通过注册不同的截获类型,从而实现插件的文件操作过滤功能。

 

插件框架能同时支持多个插件,这些插件都在堆栈中,在截获请求时自上向下按顺序截获处理。插件在堆栈中的位置顺序很重要,决定这顺序决定着处理请求的先后。如果连个插件都处于活动状态,其中一个是病毒扫描,那么这个病毒扫描插件就应该在最上面,最先截获文件操作请求,以保证请求的安全性。如果有插件在病毒扫描插件之上,那这个病毒扫描插件的作用会大打折扣。Symbian OS为插件开发者提供了两种机制来控制插件在堆栈中的位置,它们是决定位置和唯一位置。

 

插件在挂载时可以指定在堆栈中的绝对位置,这个绝对位置是所有挂接的插件数组的索引,位置0是第一个能截获请求的。绝对位置只使用于其他插件对位置不敏感时。

 

至于唯一位置,这个位置信息存在插件中,对唯一位置的识别由手机制造商来定义。监控插件由于其不对数据进行修改,它可以放在比较靠上面的位置,范围为0x20000000 - 0x2FFFFFFF ,可修改插件要对数据进行修改,其位置应靠下些,范围为0x40000000 - 0x4FFFFFFF 。需要注意的是,当插件指定了唯一位置后,在挂载时就不能再指定绝对位置了,否则会出错。

由于Symbian OS提供开发文件服务器插件的类都只是对手机制造商开放,没有完全开放给应用开发人员。但我相信,随着Symbian OS的逐步开源,将来会进一步开放,这样应用开发人员就可以做文件服务器插件的开发了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值