操作系统课程设计实验报告
更新时间:2023-07-25 20:41:01 阅读量: 实用文档 文档下载
- 操作系统课程设计推荐度:
- 相关推荐
ls命令的实现
西安郵電大學
操作系统课程设计
院系名称学生姓名专业名称班 级学号时
间报 告 书
计算机学院
: : : : : :
ls命令的实现
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编写内核模块显示目录或文件的信息。
ls命令的实现
(1) 使用内核模块编程;
(2) 调试《Linux操作系统原理与应用》第8章文件系统P215 的例子; (3) 练习给内核模块传入参数,参考关于带参数的模块编程/uid-796091-id-3206153.html; (4) 给内核模块传入参数path,其中path为绝对路径;
1) 当path为目录时,显示目录对应的dentrey结构中的相关信息(可打印
的信息);
2) 当path为文件时,显示文件对应的indoe结构中的相关信息(可打印的
信息);
3) 当路径错误时,有错误提示信息。
3 开发环境
开发环境如下表2.3-1:
表2.3-1
4测试环境
ls命令的实现
5总体设计
5.1功能组织图
Ls命令的功能组织图如下图5.1-1:
ls命令的实现
打印内核信息的功能组织图如下图5.1-2:
内核模块传入参数的功能组织图如下图5.1-3:
ls命令的实现
5.2原理
linux解释:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统
linux下c编程与windows下c编程的区别:C标准都是一样的,但是不同的操作系统下有不同的系统API调用,也有不同的编译器!如果只是做简单的练习,不需要调用系统函数的话,是完全一样的,但是在WINDOWS下编译生成的可执行文件在LINUX下是运行不起来的,要在LINUX下运行必须用LINUX下的编译器,比如GCC,这种编译器可以找到WINDOWS版本的,但是编译出来的就在WINDOWS下运行不了!简单说就是不同操作系统下的可执行文件是不能通用的,因为不同的操作系统有不同的进程结构.
文件系统原理:opendir函数的参数为一个绝对路径或者相对路径,返回值为结构体dirent类型的数值或者空值。结构体dirent中包含d_name选项,d_name中是文件名称。Stat函数参数1是文件的绝对路径,参数2是struct stat 结构体的一个参数,ststat("",&info);返回目录的相关信息,st_mode文件类型 st_uid用户(id) st_gid组(id),st_size文件大小 st_nlike文件连接数,st_mtime文件最后修改时间 st_atime最后访问时间,st_ctime文件属性最后改变时间。在<sys/stat.h>有如下定义:
#define S_IFMT 0170000 记录文件的类型#define S_IFREG0100000 regular #define S_IFDIR 0040000directory #define S_IBLK 0060000特殊块 #define S_IFCHR 0020000字符块 #define S_IFIFO 0010000 fifo #define S_IFLNK 0120000文件连接数 #define S_IFSOCK 0140000通道 if(S_ISDIR(mode)) str[0] = 'd';是设备if(S_ISCHR(mode)) str[0] = 'c';字符设备if(S_ISDIR(mode)) str[0] = 'b';块设备if(S_IRUSR & mode) str[1] = 'r';可读if(S_IWUSR & mode) str[2] = 'w';可写if(S_IXUSR & mode) str[5] = 'w';可写if(S_IXGRP & mode) str[6] = 'x'; 可执行if(S_IROTH & mode) str[7] = 'r';可读 if(S_IWOTH & mode) str[8] = 'w';可写if(S_IXOTH & mode) str[9] = 'x';可执行。Struct passwd 结构体中pw_name 用户名,pw_passwd用户密码,pw_uid用户id,pw_gid 组id,pw_gecos真是名称pw_dir用户目录pw_shell shell命令。
mode)
str[3] = 'x';可执行if(S_IRGRP & mode) str[4] = 'r';可读 if(S_IWGRP &
ls命令的实现
6详细设计
6.1.1模块一ls命令实现 1.功能
①ls -l:每个文件单独占一行,显示文件的详细属性信息 ②ls -a:显示包括隐藏文件在内的所有文件 ③ls -u:显示出文件的最后访问时间 ④ls:显示的文件名按字典顺序排序 ⑤ls /指定目录:显示当前目录下的内容
⑥ls -lu:每个文件单独占一行,显示文件的详细属性信息,并且显示出文件的 最后访问时间
⑦ls -la:显示包括隐藏文件在内的所有文件的详细属性信息
⑧ls -lua:显示包括隐藏文件在内的所有文件的详细属性信息,并且显示出文 件的最后访问时间
⑨chmod 权限 文件名:修改文件的权限,并且显示出此文件是否受suid,sgid 和sticky的控制
⑩chmod 权限(3位) 在一终端运行程序,读取文件信息,在另一终端修改文 件权限,看结果。
6.1.2模块一ls命令实现
①编写内核模块,打印super_block结构中一些域的值。(课本上的例子)遍历系统中的超级块:list_head结构类型的字段名称为s_list。list_entry宏通过指向list_head节点的地址来得到外部超级块的首地址。获取系统中个超级块的地址,获得某个子进程的地址,打印文件系统所在的主设备号和次设备号和文件系统名。遍历打印每个超级块中的所有索引节点号,打印索引结点。
②给内核模块传入参数path,其中path为绝对路径 path=路径时,显示如下信息:
1.哈希表 2.目录项名 3.短目录名 4.目录项标志 5.目录项长度
6.目录项计数器的引用
path=文件时,显示如下信息:
1.版本号 2.用户组ID 3.用户ID 4.硬链接数 5.引用记数 6.文件大小 7.文件的块数 8.文件类型和权限 9.索引节点的状态
10.以位为单位的块大小
ls命令的实现
11.文件索引节点的数量
12.指定文件系统的读写访问标志
2.算法/流程图
实现ls命令功能流程图如下:
ls命令的实现
内核模块:打印super_block结构中的一些域的值。
给内核模块传入参数path流程图,其中path为绝对路径;当path为目录时,显示目录对应的dentrey结构中的相关信息;当path为文件时,显示文件对应的indoe结构中的相关信息;当路径错误时,有错误提示信息。
ls命令的实现
开始输的 是入目录
否
输入是 的目录是否
是
误错打 印denteyr结构 信体息打 印edntrey结构 信息体打印错信误息
束结
ls命令的实现
3.运行结果 (一)ls
ls -l(1):
ls -l
以长格式的形式查看当前目录下所有文件
ls -a(2):
ls -a将隐藏文件显示出来,并按照字典进行排序
ls -R(3):
ls -R递归地列出目录中所有的文件包含子目录中的文件
ls -u(4):
ls -u根据文件最后显示时间列出
对给定目录进行操作: 1)如
./ls /tmp(5)
2)对绝对路径目录进行操作:./ls /home/weiyue/linux(6)
ls命令的实现
3)对相对路径目录进行操作:
./ls ../linux(7)
读权限:
1)先显示正常情况下:
(8)
2)再执行一次,
然后在另外一个终端里修改文件的权限:
chmod 000 abc.txt(9)
然后观察结果:
再执行一次,观察结果:(11)
(二)内核测试结果:
1)调试P215,观察数据结构中的数据:(12)
ls命令的实现
进行内核操作时要在root权限下
2)给内核模块传入参数path,其中path为绝对路径:
1.当path为目录时,显示目录对应的dentrey结构中的相关信息(可打印的信息);
2.当path为文件时,显示文件对应的indoe结构中的相关信息(可打印的信息);
3.当路径错误时,有错误提示信息
ls命令的实现
4.模块使用的主要函数、数据类型和宏 (1)主要函数说明 1)函数do_ls();
原型;void do_ls(char dirname[],int choose,int abcd)
功能:输出当前目录,或者指定目录(默认当前目录)的所有文件的信息,
结果按字典排序。先按文件名称长度排序,相等长度的名称的按字典排 序,无论中文名称的长度是多少,统一排在最后一个英文名称的文件后 面,中文名称的文件名称按长度排序,相等长度的按字典排序。
参数:char dirname[],含有文件名称的字符串,abcd,选项选择输出详细
信息或不输出相信信息
ls命令的实现
返回值:void
2)函数do_ls();
原型:void do_ls(char *);
功能:根据参数进行ls命令功能实现 返回值:void
3)函数file_info( );
原型:void file_info( char *filename, struct stat *info_p ) 功能:输出文件的信息:分配给文件的超级块的节点号,访问控制权限
引用计数,硬链接数使用者ID,使用者组ID,版本号,以字节为单位
4)函数qsort();
原型;qsort(filename,i,sizeof(filename[0]),cmp);
功能:根据cmp函数比较filename中所有名称,返回有序的名称数组。 参数:filename名称数组,i数组的个数,sizeof(filename[0]),数组单
元的大小,cmp用于比较函数的的函数。 返回值:void
的文件大小,文件块数,状态标志 返回值:void
7测试方法与测试结果
7.1测试方法以及测试结果
单元测试:
ls命令的实现
课程设计要求确认测试:
ls命令的实现
8调试情况,设计技巧及体会
在本次为期两周的课设中,我们完成了通过自己编码实现ls的功能,并
且可以带部分参数(-l,-a,-R,-u),以及部分内核态的操作,可以给内核模块传入参数path。
设计过程中,要先对代码架构进行构思,然后用结构化分析方法进行分
析,将ls命令系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽可能的将模块细分,最后在进行函数的调用。在函数的编写过程中,不仅用到了很多系统的结构体,还用到了函数之间的调用(包括递归调用)。只要将每个模块都认真做好,都会很很大的收获。
之前已经学习linux的一些东西,但是我所学的知识最多也就是在做作
业的时候才会用到,很少实现系统一级的代码,平时没有什么练习的机会,这次的课程设计通过自己构思,和同学讨论并且不断查阅资料来设计一项程序。这次设计,不仅巩固了我以前所学的知识,还让我对系统调用有了更深一步的了解,掌握了更多的技巧和技能。
虽然两周的时间很短短,但是收获却是满满的。希望以后在学习过程中,
多加练习,争取更大的进步。
9参考资料
[1] DANIEL P.BOVET&MARCO CESATI. 深入理解LINUX内核[M]. 陈莉君,张琼声,张宏
伟,译.第三版. 北京:中国电力出版社,2007:825-831. 出版社,2011:293-399,596-608.
[2]unix、linux编程实战教程. BruceMolay著,杨海源,黄海涛译 北京:清华大学
源程序清单
正在阅读:
操作系统课程设计实验报告07-25
我的启蒙恩师作文500字06-28
银行营业主管工作总结10-08
2018年中国并购基金行业分析报告05-15
员工聘用协议和劳动合同的,区别10-04
液压克令吊用转盘轴承设计说明书03-17
浙江大学第二届学业规划大赛作品集05-04
清明节古诗大全_清明节诗句欣赏04-04
河北省深州市第一中学2013届九年级下学期第一次月考语文试卷12-18
初中学校年终校长总结报告03-12
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 操作系统
- 课程
- 实验
- 报告
- 设计
- 新奥特VE800非编系统方案模版
- 母婴销售导购工作总结样本3篇
- 综合英语教程第三册13单元3-13-Part 2
- 消防安全管理案例分析第三章
- _GPS_RTK技术在现代矿山测量中的应用体会
- 培训讲师的心态与选择
- 2013年高考安徽数学理科试题及答案
- 实际问题与二次函数学案桥洞、隧道问题 - 副本
- 2011年度河南省信息技术教育优秀成果奖评选结果公示的通知44
- 口腔颌面部损伤84例的急救与护理
- 探索RAW的奥秘 让你的摄影水平进入新阶段
- 物业服务公司公共水电分摊表
- 山东省日照市2018届高三11月校际联合期中考试化学试卷(含答案)
- 旅游企业人力资源管理论文-程盼盼
- 山西省乡镇卫生院、社区服务中心明细
- 常见材料知识——石材
- 2021年医学检验实习自我鉴定
- 高中英语语法能力提升专项训练2—— 冠词和数词
- 百格测试操作指导书
- 第8章电控驱动防滑系统