DOS文件操作的两套系统调用

Author: Date: 1996-01-19

        DOS向外提供了两套有关文件操作的系统调用,一套是使用文件控制块FCB,另一套是使用句柄。
        FCB式文件操作系统功能是MS-DOS从CP/M操作系统移植过来的,DOS 1.0版就已具备,以后各版本又沿袭下来。使用这类系统功能时,应用程序必须在自己的程序空间设立一个FCB,写入某些初始数据,然后将它“打开”,即由DOS将系统内部保存的文件控制信息回填给此FCB。以后程序就可使用这个打开的FCB去存取文件和关闭文件了。FCB式文件操作系统功能把文件看成是有记录结构的顺序文件,缺省的记录长度是128字节(那正是CP/M的扇区大小),可用记录号来随机存取,也可用当前块号一块内记录号来顺序存取。
        从DOS 1.X版到DOS 2.0版,FCB式文件操作系统功能就有所提高,但为了保持与CP/M的兼容,仍有如下局限:
        (1)只能访问当前目录下的文件;
        (2)FCB占用程序空间,还要求程序指定一个磁盘传输区(DTA)或使用缺省的DTA;
        (3)FCB打开时,只有一种称为“兼容方式”的共享方式,而该共享方式不支持网络环境下的文件共享。
        因此,Microsoft公司不鼓励用户使用FCB式文件操作系统功能,预计将来的DOS版本对此类系统调用的支持会越来越少。
        DOS从2.0版开始采用了树形目录结构,支持以文件名+路径名(以0结尾的ASCII字符串)的方式来访问任何目录下的文件。应用程序只要准备好一个ASCII字符串,就少去打开文件,文件打开后返因一个16位的二进制代码,这就是所谓的文件句柄(handle),尔后,程序就可以句柄去存取文件或关闭文件等。句柄式文件操作系统功能把文件看成是无结构的字符流,用户可任意组织文件的格式,既可以顺序存取也可以随机存取,每次可以从文件中的任何位置开始来存取任意字节长度的数据。
        句柄方式是与UNIX操作系统兼容的文件管理方式,它有如下突出的优点:
        (1)能访问树型目录结构中的任何位置的文件;
        (2)支持网络环境下的文件共享;
        (3)支持标准输入、标准输出的访问操作和管道操作;
        (4)操作灵活、方便,尤其是调用不成功时能提供大量的错误信息。
        因此,Microsoft公司鼓励用户使用句柄方式文件操作系统调用,今后的DOS版本将保持与这类系统功能的兼容。
        两套文件操作的系统功能,在DOS内部各有一个系统文件打开表SFT。但是这两个表的表项(也常称为内部文件控制块ifcb)结构却非常相近。因而DOS内核可以用基本上是一套的文件服务子程序来支持两套系统功能的实现。