文件系统ls实现与内核编码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件系统ls实现与内核编码

一. 设计目的

操作系统是控制和管理计算机硬件和软件资源的虚拟机,其中的文件系统是对软件和设备进行管理的系统,文件系统是操作系统中非常重要的一个模块,它的实现占用了操作系统源码的最大编码量,其好坏也直接影响着用户对操作系统的感受程度。通过对操作系统课程设计的实践,进一步加深对文件系统的认识和理解,并在此基础上培养学生的工程应用能力。实验分别从用户态和内核态两个层实践文件系统的部分功能。

二. 设计内容

1.使用Linux编程实现用户态下带参数的ls命令功能

ls命令支持以下功能:

①支持 -l 参数;

②输出结果按字典排序;

③列出“.”文件,支持-a参数,在没有-a时候不显示隐藏文件;

④显示记录总数;

⑤支持对给定的目录进行操作,如 ls /tmp;

⑥正确显示文件特殊属性suid、sgid和stick y;

⑦支持-u参数,它会显示出文件的最后访问时间;

⑧当关掉一个文件的读权限,就不能打开这个文件来读。如果从一个终端登录,打开一个文件,保持文件的打开状态,然后从另外的终端登录,去掉文件的读权限,看会出现什么情况。编写一个程序,先用open()打开一个文件,用read()读一些内容,调用sleep()等待20s 以后,再读一些内容,从另外的终端,再等待的20s内去掉文件的读权限,这样会有什么结果?

2.编写内核模块显示目录或文件的信息。

⑪调试《Linux操作系统原理与应用》第8章文件系统P215 的例子

⑫给内核模块传入参数path,其中path为绝对路径

①当path为目录时,显示目录对应的dentrey结构中的相关信息(可打印的信息);

②当path为文件时,显示文件对应的indoe结构中的相关信息(可打印的信息);

③当路径错误时,有错误提示信息。三.概要设计

1.功能模块图;

⑪实现ls命令功能

⑫编写内核模块

①编写内核模块,打印super_block结构中一些域的值。(课本上的例子)

②给内核模块传入参数path,其中path为绝对路径

2.各个模块详细的功能描述。

⑪实现ls命令功能

①ls -l:每个文件单独占一行,显示文件的详细属性信息

②ls -a:显示包括隐藏文件在内的所有文件

③ls -u:显示出文件的最后访问时间

④ls:显示的文件名按字典顺序排序

⑤ls /指定目录:显示当前目录下的内容

⑥ls -lu:每个文件单独占一行,显示文件的详细属性信息,并且显示出文件的最后访问时间

⑦ls -la:显示包括隐藏文件在内的所有文件的详细属性信息

⑧ls -lua:显示包括隐藏文件在内的所有文件的详细属性信息,并且显示出文件的最后访问时间

⑨chmod 权限文件名:修改文件的权限,并且显示出此文件是否受suid,sgid和sticky的控制

⑩chmod 权限(3位) 在一终端运行程序,读取文件信息,在另一终端修改文件权限,看结果。

⑫编写内核模块

①编写内核模块,打印super_block结构中一些域的值。(课本上的例子)

遍历系统中的超级块:list_head结构类型的字段名称为s_list。list_entry宏通过指向list_head 节点的地址来得到外部超级块的首地址。获取系统中个超级块的地址,获得某个子进程的地址,打印文件系统所在的主设备号和次设备号和文件系统名。遍历打印每个超级块中的所有索引节点号,打印索引结点。

②给内核模块传入参数path,其中path为绝对路径

path=路径时,显示如下信息:

●目录项标志

●哈希表

●短目录名

●目录项长度

●目录项名

●目录项计数器的引用

path=文件时,显示如下信息:

●文件索引节点的数量

●文件类型和权限

●用户ID

●用户组ID

●指定文件系统的读写访问标志

●文件大小

●索引节点的状态

●硬链接数

●引用记数

●文件的块数

●版本号

●以位为单位的块大小

错误信息显示:Open file failed

四.详细设计

1.功能函数的调用关系图

⑪ls 命令

①错误处理函数,打印出错误所在行的行数和错误信息 void my_error(const char *error_string, int line); ②获取文件属性

void show_file_attribute(struct stat buf,char *file_name,int flag_u) ③输出文件的文件名,若命令中

没有-l 选项,则输出文件时要保证上下

对齐 void show_file_columns(char *file_name) ④根据命令行参数(存放在flag 中)和完整路径名(存放在pathname 中)显示目标文件 void show_file(int flag,char *pathname) ⑤为显示某个目录下的文件做准备,path:要显示的目录 void show_file_dir(int flag_param,char *path)

⑫编写内核模块

①编写内核模块,打印super_block 结构中一些域的值。(课本上的例子)

②给内核模块传入参数path,其中path为绝对路径

2.各功能函数的数据流程图

void show_file_dir(int flag_param,char *path)

⑫编写内核模块

①编写内核模块,打印super_block结构中一些域的值。(课本上的例子)

相关文档
最新文档