目录 上一页 下一页 下一章

第8章 文件句柄功能与磁盘 -207-

第8章 文件句柄功能与磁盘

  FCB功能的存在是出于历史的原因,虽然它也有一些很显著的优点,但随着DOS版本的升级,FCB功能逐渐被另一套文件处理功能所取代。即使是DOS的设计者Microsoft公司也并不提倡程序员使用FCB功能。因此在本章我们将研究DOS提供的另一套功能--"文件句柄功能"的应用。

8.1 文件句柄功能调用
  我们在前面讨论过,使用FCB处理文件有一个十分显著的缺点,那就是无法处理"树形目录"。这并不能怪FCB的功能弱,FCB功能源于CP/M操作系统,而树形目录是在DOS2.0版中才引入PC中的,所以利用FCB无法处理也就不足为奇了。
  所谓树形目录,是Microsoft从UNIX/XENIX操作系统中移植到DOS中的,它引入了"子目录"的的概念,使磁盘在有限的空间内能够更合理地容纳更多的文件,方便了用户对文件的管理工作。
  为了使程序设计人员能够有效的处理树形目录,DOS提供了一套称之为"文件句柄功能调用"的API接口,和FCB功能相比,文件句柄功能的一个突出特点就是将FCB中保存的文件特征信息隐藏在DOS内部,而对于我们设计的程序,DOS只提供了一个16位的数据,这个数据就是我们所说的"文件句柄"。我们现在就来研究一下有关"文件句柄"功能所需的一个很重要的基础知识--文件名与路径名。
  我们使用FCB功能打开文件时,需要先初始化一个"未打开"的FCB,也就是在FCB的前12个字节中填入相应驱动器符和文件名。这实际上是给DOS提供执行打开操作的依据。而使用文件句柄功能处理文件也有这样一个步骤。但是我们需要提供给DOS的数据就不象FCB那么死板了。主要的区别在于我们所给出的数据不仅有驱动器符和文件名,还可以包含路径名。DOS规定我们给出的数据应具有下面这样的结构:
  [Drive][路径名]<文件名>.<扩展名>,00H
  其中Drive项是驱动器名,同FCB的规定不同,DOS不再接受0,1,2,3这样的数字表示,而要求我们直接使用A:,B:,C:,D:这样的表示法;[路径名]一项和我们一般理解的路径名是一致的,即一系列用"\"隔离开的子目录名。文件名和扩展名没什么更多说的,需注意的是其中的那个"."不能省去;至于未尾那个"00H",这是DOS所规定必须要有的表示结尾的标志。所以我们说我们提供给DOS的数据是一个由ASCII字符组成的字符串加上一个"0"字节构成,习惯上我们把这串数据称为ASCIIZ串(ASCII ZERO)。比如我们需要处理WINDOWS系统中名为WIN386.EXE的文件,那么我们将这样定义ASCIIZ串:
  FILENAME DB'C:\WINDOWS\WIN386.EXE',0

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章