西安邮电大学linux操作系统课程设计

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

西安郵電大學

操作系统课程设计

报告书

院系名称:软件工程

学生姓名:蒋博

专业名称:软件工程

班级:1202班

学号:04123038

时间:2015 年4月13 日至2015 年4月24 日

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)练习给内核模块传入参数,参考关于带参数的模块编程

/uid-796091-id-3206153.html;

(4)给内核模块传入参数path,其中path为绝对路径;

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

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

3)当路径错误时,有错误提示信息。

3开发环境

4测试环境

5总体设计

5.1功能组织图

对实现的功能模块画出功能组织图,并进行文字说明。

图或表都需编号起名字,具体要求参见《linux操作系统原理与应用教材》。

5.2原理

原理主要说明设计中使用的相关原理。如对linux解释、对linux下c编程的解释、linux下c编程与windows下c编程的区别、文件系统原理(必须写出与设计程序相关的部分)。

6详细设计

6.1 模块一XXX

1.功能

进行对输入关键字的判断。

3.运行结果

测试结果有显示。

4.模块使用的主要函数、数据类型和宏

(1)主要函数说明

1)函数一

原型;

main(int ac,char *av[])

{

int x=0,j;//x控制传进来参数个数

int sx=0,ss=0;//sx控制sign数组存的信息,ss控制sstring存的信息

if(ac==1) //不带参数查看当前目录。

{

flag=0;

futian_do_ls(".",flag);

}

else

{

for(x=1;x

if(av[x][0]=='-')

{

strcpy(sign[sx],av[x]);

sx++;

}

else

{

strcpy(sstring[ss],av[x]);

ss++;

}

if(ss==0)//没有目录全是命令

{

strcpy(sstring[ss],".");

ss++;

}

}

if(sx==0)//没有输入命令全是目录

{

flag=0;

for(x=0;x

{

printf("%s:\n",sstring[x]);

futian_do_ls(sstring[x],flag);

}

}

if(sx==1)//只有一个命令

{

for(x=ss-1;x>=0;x--)

{

name[100]='\0';

t=0;

ftname[100][100]='\0';

printf("%s:\n",sstring[x]);

if(strcmp(sign[0],"-a")==0)

{

flag=1;

futian_do_ls(sstring[x],flag);

}

if(strcmp(sign[0],"-l")==0)

{

flag=2;

futian_do_ls(sstring[x],flag);

}

if(strcmp(sign[0],"-u")==0)

{

flag=4;

futian_do_ls(sstring[x],flag);

}

if(strcmp(sign[0],"-R")==0)

{

flag=7;

futian_do_ls(sstring[x],flag);

}

}

}

}

功能:判断输入是地址还是“-”带参数的命令,如果是带参数的命令,则在根据带的参数的值改变其flag的值。

参数:(int ac,char *av[])

返回值:flag

(2)数据类型

1)数据类型1

;

struct nandt{

char name2[100];

char name1[100];

int time1;

}

名称:nanme2,name1,time1

类型:

name2:char型数组

name1:char型数组

time:int型

含义:

Name2,name1:存放当前文件名

相关文档
最新文档