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

上传人:cn****1 文档编号:488579509 上传时间:2023-07-06 格式:DOCX 页数:25 大小:551.10KB
返回 下载 相关 举报
文件系统ls实现与内核编码_第1页
第1页 / 共25页
文件系统ls实现与内核编码_第2页
第2页 / 共25页
文件系统ls实现与内核编码_第3页
第3页 / 共25页
文件系统ls实现与内核编码_第4页
第4页 / 共25页
文件系统ls实现与内核编码_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《文件系统ls实现与内核编码》由会员分享,可在线阅读,更多相关《文件系统ls实现与内核编码(25页珍藏版)》请在金锄头文库上搜索。

1、文件系统 ls 实现与内核编码一 . 设计目的操作系统是控制和管理计算机硬件和软件资源的虚拟机, 其中的文件系统是对软件和设备进行管理的系统, 文件系统是操作系统中非常重要的一个模块, 它的实现占用了操作系统源码的最大编码量, 其好坏也直接影响着用户对操作系统的感受程度。 通过对操作系统课程设计的实践, 进一步加深对文件系统的认识和理解, 并在此基础上培养学生的工程应用能力。实验分别从用户态和内核态两个层实践文件系统的部分功能。二 . 设计内容1 .使用Linux 编程实现用户态下带参数的ls 命令功能ls 命令支持以下功能:支持-l 参数;输出结果按字典排序;列出“ . ”文件,支持 -a

2、参数,在没有-a 时候不显示隐藏文件;显示记录总数;支持对给定的目录进行操作,如 ls /tmp ;正确显示文件特殊属性suid 、 sgid 和 stick y;支持 -u 参数,它会显示出文件的最后访问时间;当关掉一个文件的读权限, 就不能打开这个文件来读。 如果从一个终端登录, 打开一个文件, 保持文件的打开状态, 然后从另外的终端登录, 去掉文件的读权限, 看会出现什么情况。编写一个程序,先用 open() 打开一个文件,用 read() 读一些内容,调用 sleep() 等待 20s以后, 再读一些内容,从另外的终端,再等待的 20s 内去掉文件的读权限, 这样会有什么结果?2 .

3、编写内核模块显示目录或文件的信息。调试Linux操作系统原理与应用第 8章文件系统P215的例子给内核模块传入参数path ,其中 path 为绝对路径当 path 为目录时,显示目录对应的 dentrey 结构中的相关信息(可打印的信息) ;当 path 为文件时,显示文件对应的 indoe 结构中的相关信息(可打印的信息) ;当路径错误时,有错误提示信息。.概要设计1.功能模块图;实现ls命令功能文 件 名 按 字 典 排 序在一终端运行1.c ,读出文件 中的内容,在另 一终端修改文 件权限,再显示 结果,然后在修 改文件权限,再 显不结果OLs -laLs -luLs -uaLs -l

4、uaLs指定文件/指定目录-lLs指定文件/指定目录-uLs 指定文件/指定目录 -aLs指定文件/指定目录-laLs指定文件/指定目录-luLs 指定文件/指定目录 -uaLs指定文件/指定目录 Tua编写内核模块编写内核模块,打印super_block结构中一些域的值。(课本上白例子)给内核模块传入参数path ,其中path为绝对路径显示目录信息显示文件信息显示错误信息2各个模块详细的功能描述。实现 ls 命令功能Is -l:每个文件单独占一行,显示文件的详细属性信息 ls -a :显示包括隐藏文件在内的所有文件ls -u:显示出文件的最后访问时间ls:显示的文件名按字典顺序排序 ls

5、/ 指定目录:显示当前目录下的内容 ls -lu : 每个文件单独占一行, 显示文件的详细属性信息, 并且显示出文件的最后访问时间ls -la :显示包括隐藏文件在内的所有文件的详细属性信息ls -lua:显示包括隐藏文件在内的所有文件的详细属性信息,并且显示出文件的最后访问时间 chmod 权限 文件名:修改文件的权限,并且显示出此文件是否受suid , sgid 和 sticky 的控制 chmod 权限 (3 位) 在一终端运行程序,读取文件信息,在另一终端修改文件权限,看结果。编写内核模块编写内核模块,打印 super_block结构中一些域的值。(课本上白例子)遍历系统中的超级块:

6、list_head 结构类型的字段名称为 s_list 。 list_entry 宏通过指向 list_head节点的地址来得到外部超级块的首地址。 获取系统中个超级块的地址, 获得某个子进程的地址, 打印文件系统所在的主设备号和次设备号和文件系统名。 遍历打印每个超级块中的所有索引节点号,打印索引结点。给内核模块传入参数path ,其中 path 为绝对路径path= 路径时,显示如下信息 :目录项标志哈希表短目录名目录项长度目录项名目录项计数器的引用path= 文件时,显示如下信息:文件索引节点的数量文件类型和权限用户 ID用户组 ID指定文件系统的读写访问标志文件大小索引节点的状态硬链接

7、数引用记数文件的块数版本号以位为单位的块大小错误信息显示: Open file failed四.详细设计1 .功能函数的调用关系图ls命令i昔误处理函数,打印出错误所在行的行数和错误信息void my_error(constchar *error_string, int line);获取文件属性void show_file_attribute(struct stat buf,char *file_name,int flag_u)输出文件的文件名,若命令中没有-1选项,则输出文件时要保证h下对齐void show_fi1e_co1umns(cha*fi1e_name)四艮据命令行参数(存放在fl

8、ag中)和完整路径名(存放在pathname)显示目标文件void show_fi1e(int f1ag,char *pathname)为显示某个目录下的文件做准备,path:要显示的目录void show_file_dir(int flag_param,char*path)编写内核模块编写内核模块,打印 super_block结构中一些域的值。(课本上白例子)给内核模块传入参数path ,其中path为绝对路径2 .各功能函数的数据流程图ls命令获取文件属性void show_file_attribute(struct stat buf,char *file_name,int flag_u)

9、输出文件的文件名,若命令中没有-1选项,则输出文件时要保证h下对齐void show_fi1e_co1umns(charfi1e_name)四艮据命令行参数(存放在flag中)和完整路径名(存放在pathname)显示目标文件void show_fi1e(int f1ag,char *pathname)从路径中解析出文件名为显示某个目录下的文件做准备,path:要显示的目录void show_file_dir(int flag_param,char*path)编写内核模块(课本上白例子)编写内核模块,打印 super_block结构中一些域的值。遍历打印每个超级块中的所有索引节点号索引节点数量

10、打印索引结点锁 解给内核模块传入参数path ,其中path为绝对路径文件信息目录信息输出目录项信息目录项标志哈希表短目录名目录项长度目录项名目录项计数器的引用3 .重点设计及编码ls命令重点设计:为显示某个目录下的文件做准备,path:要显示的目录编码:void show_file_dir(int flag_param,char *path)DIR *dir;对目录进行操作struct dirent *ptr;/对目录的数据项进行操作int count=0;char filenames256PATH_MAX+1,tempPA TH_MAX+1;char tempfilePATH_MAX+1;

11、struct stat buf;int atimePATH_MAX+1,temp1;/获取该目录下文件总数和最长的文件名dir=opendir(path);if(dir=NULL)my_error(opendir,_LINE_);while(ptr=readdir(dir)!=NULL)对整个目录进行遍历if(filename_maxlend_name) filename_maxlen=strlen(ptr-d_name);count+;closedir(dir);if(count256)my_error(这个目录下的文件太多了,_LINE_);int i,j,length=strlen(pa

12、th);/获取该目录下所有的文件名dir=opendir(path);for(i=0;id_name);if(lstat(tempfile,&buf) = -1) my_error(lstat, _LINE_);atimei = buf.st_atime;strncpy(filenamesi,path,length);/ 保存文件路径filenamesilength=0;strcat(filenamesi,ptr-d_name);/d_name: 当前目录下所有文件/子目录filenamesilength+strlen(ptr-d_name)=0;/文件名按最后访问时间进行排序if(flag_param = PARAM_U|(flag_param = PARAM_U+PARAM_A)for(i = 0;i count-1;i+)for(j = i+1;j count;j+)if(atimei atimej)temp1 = atimei;atimei = atimej;atimej = temp1;strcpy(tempfile,filenamesi); strcpy(filenamesi,filenamesj);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题 > 初中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号