论文部分内容阅读
在UNIX中,文件是一个非常广泛的概念,以下都可以被称作为文件:通过open()系统调用创建的五种位于磁盘上的的文件:正规文件、目录文件、字符设备文件、块设备文件、先进先出文件。
通过pipe()系统调用创建的匿名管道。
通过socket()系统调用创建的套接字。
系统中存在着多种类型的文件,但是对于系统内核而言,所有的打开文件都是由文件描述引用,程序员可以使用一套相同的系统调用read、write、lseek、dup、dup2等来操纵文件描述符,对于套接字来说,还可以在上面施加send、recv、sendto、recvfrom等动作。
通过使用面向对象中的继承和多态的技术,本文提出了一种可扩展性的设计,它的基本思路如下:1)设计一个称为“文件描述符”的抽象基类,这个类声明了read、write、lseek、ioctl等虚方法。
2)针对每一个具体类型的文件:正规文件、目录文件、字符设备文件、块设备文件、先进先出文件、匿名管道,设计一个继承于文件描述符的类,每个类都提供自己相应的read、write、lseek、ioctl等方法。
3)在read、write、lseek、ioctl等系统调用中,通过使用一个指向抽象文件的指针,来调用具体类型的文件中的方法。
4)设计一个称为“套接字描述符”的抽象基类,这个类派生于“文件描述符”,声明了send、recv、sendto、recvfrom等虚方法。
5)针对每一个具体类型的套接字:UNIX域流套接字、UNIX域数据报套接字、TCP流套接字、UDP数据报套接字,设计一个继承于“套接字描述符”的类,每个类都提供自己相应的read、write、lseek、ioctl和send、recv、sendto、recvfrom等方法。
6)在send、recv、sendto、recvfrom等系统调用中,通过使用一个指向抽象文件的指针,来调用具体类型的套接字中的方法。
本文的主要创新点在于:系统的分析了UNIX系统中和文件描述符相关的系统调用。
提出一种使用类继承和多态的设计方法来设计文件描述符,我们用C++实现了一个运行在80386保护模式下的UNIX类作业系统,从而有力的证明了该设计方案的可行性。