西安郵電大學。
报告书。1 实验目的。
操作系统是控制和管理计算机硬件和软件资源的虚拟机,其中的文件系统是对软件和设备进行管理的系统,文件系统是操作系统中非常重要的一个模块,它的实现占用了操作系统源码的最大编码量,其好坏也直接影响着用户对操作系统的感受程度。通过对操作系统课程设计的实践,进一步加深对文件系统的认识和理解,并在此基础上培养学生的工程应用能力。实验分别从用户态和内核态两个层次实践文件系统的部分功能。
2 实验任务。
2.1 ls实现。
在linux下编程实现带参数的shell命令 ls,ls命令必须支持如下功能。
1.基本要求。
1) 支持 -l 参数;
2) 输出结果按字典排序;
3) 列出“.”文件,支持-a参数,在没有-a时候不显示隐藏文件;
4) 显示记录总数。
2.高级要求。
1) 支持对给定的目录进行操作,如 ls /tmp;
2) 输出结果分栏排序,每栏的宽度由这一栏最长的文件名决定,显示的栏数还受终端显示器的宽度影响,每一列尽可能的等宽;
3) 正确显示文件特殊属性suid、sgid和sticky,参见联机帮助确保程序能处理各种情况;
4) 支持标准的ls支持选项-r,它的功能是递归地列出目录中所有的文件包含子目录中的文件;
5) 支持标准的ls支持选项-u,它会显示出文件的最后访问时间,如果用了-u而不用-l,会有什么结果?;
6) 当关掉一个文件的读权限,就不能打开这个文件来读。如果从一个终端登录,打开一个文件,保持文件的打开状态,然后从另外的终端登录,去掉文件的读权限,这时有什么事情会发生?编写一个程序,先用open()打开一个文件,用read()读一些内容,调用sleep()等待20s以后,再读一些内容,从另外的终端,再等待的20s内去掉文件的读权限,这样会有什么结果?。
2.2编写内核模块显示目录或文件的信息。
1) 使用内核模块编程;
2) 调试《linux操作系统原理与应用》第8章文件系统p215 的例子;
3) 练习给内核模块传入参数,参考关于带参数的模块编程
4) 给内核模块传入参数path,其中path为绝对路径;
1) 当path为目录时,显示目录对应的dentrey结构中的相关信息(可打印的信息);
2) 当path为文件时,显示文件对应的indoe结构中的相关信息(可打印的信息);
3) 当路径错误时,有错误提示信息。
3 开发环境。
4 测试环境。
5 总体设计。
5.1功能组织图。
图1-1ls是用来列出目录下的文件。
ls-l列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
ls-a列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以。开头的,如果存在。代表存在着父目录)
ls-l-a和ls-a-l列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等,包括以“.“开头的隐藏文件。
ls-r将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现。
ls-u显示访问时间但根据名称排序。
5.2原理。
文件是文件系统对数据的分割单元。文件系统用目录来组织文件,予文件以上下分级的结构。在硬盘上实现这一分级结构的关键,是使用inode来虚拟普通文件和目录文件对象。
在linux文件管理中,我们知道,一个文件除了自身的数据之外,有一个附属信息,即文件的元数据(metadata)。这个元数据用于记录文件的许多信息,比如文件大小,拥有人,所属的组,修改日期等等。元数据并不包含在文件的数据中,而是由操作系统维护的。
事实上,这个所谓的元数据就包含在inode中。我们可以用$ls -l filename来查看这些元数据。正如我们上面看到的,inode所占据的区域与数据块的区域不同。
每个inode有一个唯一的整数编号(inode number)表示。
在保存元数据,inode是“文件”从抽象到具体的关键。正如上一节中。
到的,inode储存由一些指针,这些指针指向存储设备中的一些数据块,文件的内容就储存在这些数据块中。当linux想要打开一个文件时,只需要找到文件对应的inode,然后沿着指针,将所有的数据块收集起来,就可以在内存中组成一个文件的数据了。
6 详细设计。
6.1 模块一参数处理。
1.功能。处理输入的参数。
2.算法/流程图。
3.运行结果。
4.模块使用的主要函数、数据类型和宏。
1)主要函数说明。
1)函数一。
原型:main(int ac, char ***)
功能:用来列出目录下的文件。
参数:无。返回值:void
6.2 模块二 ls
1.功能:具体实现ls
2.算法/流程图。
首先,我们使用opendir函数打开目录a,返回指向目录a的dir结构体c。
接着,我们调用readdir( c)函数读取目录a下所有文件(包括目录),返指向目录a下所有文件的dirent结构体d。
然后,我们遍历d,调用stat(d->name,stat *e)来获取每个文件的详细信息,存储在stat结构体e中。
3.运行结果。
ls-r4.模块使用的主要函数、数据类型和宏。
1)主要函数说明。
1)函数一。
原型:void ls(char)
功能:用来列出目录下的文件。
参数:char
返回值:void
2)数据类型。
1)数据类型1
名称:maxlen
类型:int
含义:最长文件名。
2)数据类型2
名称:fn类型:int
含义:文件数量。
3)数据类型3
名称:le**e_len
类型:int
含义:文件名长度。
3)宏。名称:filemaxsize
含义:文件名长度。
名称:maxrowlen
含义:输出宽度。
2)函数二。
原型:void ls_r(char)
功能:用来列出目录下的所有文件。
参数:char
返回值:void
2)数据类型。
1)数据类型1
名称:direntp
类型:struct dirent *
含义:目录流指针。
2)数据类型2
名称:dir_ptr
类型:dir *
含义:记录打开的目录的信息。
3)数据类型3
名称:info
类型:struct stat
含义:记录文件的属性。
3)函数三。
原型:void ls_u(char)
功能:显示文件的访问时间。
参数:char
返回值:void
2)数据类型。
1)数据类型1
名称:direntp
类型:struct dirent *
含义:目录流指针。
2)数据类型2
名称:dir_ptr
类型:dir *
含义:记录打开的目录的信息。
3)数据类型3
名称:info
类型:struct stat
含义:记录文件的属性。
4)数据类型4
名称:fullpath
类型:char *
含义:记录文件的绝对路径。
4)函数四。
原型:void ls_a(char)
功能:显示隐藏文件。
参数:char
返回值:void
2)数据类型。
1)数据类型1
名称:direntp
类型:struct dirent *
含义:目录流指针。
2)数据类型2
名称:dir_ptr
类型:dir *
含义:记录打开的目录的信息。
4)数据类型4
名称:fullpath
类型:char *
含义:记录文件的绝对路径。
5)函数五。
原型:void ls_l_a(char)
功能:显示隐藏文件的信息。
参数:char
返回值:void
2)数据类型。
1)数据类型1
名称:direntp
类型:struct dirent *
含义:目录流指针。
2)数据类型2
名称:dir_ptr
类型:dir *
含义:记录打开的目录的信息。
3)数据类型3
名称:info
类型:struct stat
含义:记录文件的属性。
4)数据类型4
名称:fullpath
类型:char *
含义:记录文件的绝对路径。
6)函数六。
原型:void ls_l(char)
功能:显示文件的信息。
参数:char
返回值:void
2)数据类型。
1)数据类型1
名称:direntp
类型:struct dirent *
含义:目录流指针。
2)数据类型2
名称:dir_ptr
类型:dir *
含义:记录打开的目录的信息。
3)数据类型3
名称:info
类型:struct stat
含义:记录文件的属性。
4)数据类型4
名称:fullpath
类型:char *
含义:记录文件的绝对路径。
7)函数七。
原型:void sort(char title[filemaxsize],int n);
功能:对文件名进行字典排序。
参数:char title[filemaxsize],int n
返回值:void
2)数据类型。
1)数据类型1
名称:i,j,k
类型:int
含义:循环变量。
8)函数八。
原型:void dostat(char *fullpath, char *filename);
功能:读取文件属性之前的判断,判断是否可以读取。
参数:char *fullpath, char *filename
返回值:void
2)数据类型。
1)数据类型1
名称:info
类型:struct stat
含义:记录文件的属性。
9)函数九。
原型:void dostat_u(char *fullpath, char *filename);
功能:读取将要显示访问时间的文件属性之前的判断,判断是否可以读取。
参数:char *fullpath, char *filename
返回值:void
2)数据类型。
1)数据类型1
名称:info
类型:struct stat
含义:记录文件的属性。
10)函数十。
原型:void stat(char *fullpath, struct stat *info);
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....