汤园园课程的设计Word文档格式.docx

上传人:b****9 文档编号:13060807 上传时间:2022-10-04 格式:DOCX 页数:48 大小:128.28KB
下载 相关 举报
汤园园课程的设计Word文档格式.docx_第1页
第1页 / 共48页
汤园园课程的设计Word文档格式.docx_第2页
第2页 / 共48页
汤园园课程的设计Word文档格式.docx_第3页
第3页 / 共48页
汤园园课程的设计Word文档格式.docx_第4页
第4页 / 共48页
汤园园课程的设计Word文档格式.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

汤园园课程的设计Word文档格式.docx

《汤园园课程的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《汤园园课程的设计Word文档格式.docx(48页珍藏版)》请在冰豆网上搜索。

汤园园课程的设计Word文档格式.docx

为LINUX设计一个简单的二级文件系统。

要求做到以下几点:

1、可以实现下列几条命令(至少4条)。

Login 用户登录

Dir 列文件目录

Create 创建文件

Delete 删除文件

Open 打开文件

Close 关闭文件

Read 读文件

Write 写文件

2、列目录时要列出文件名、物理地址、保护码和文件长度。

3、源文件可以进行读写保护。

(2)设计原理和系统总体功能框架图

设计原理:

首先本文件系统采用两级目录,其中第一级对应于用户账户,第二级对应于用户账户下的文件。

另外,为了简单本文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。

另外该文件系统依据以下数据结构及主要函数而设计的。

【1】主要的一些数据结构

1)i节点

structinode

{structinode*i_forw;

structinode*i_back;

chari_flag;

unsignedinti_ino;

/*磁盘i节点标号*/

unsignedinti_count;

/*引用计数*/

unsigned short di_number;

/*关联文件数,当为0时,则删除该文件*/

unsigned short di_mode;

/*存取权限*/

unsigned short di_uid;

/*磁盘i节点用户id*/

unsigned short di_gid;

/*磁盘i节点组id*/unsigned int di_addr[NADDR];

/*物理块号*/

2)磁盘i节点

structdinode

{ unsigned short di_number;

/*关联文件数*/unsigned short di_mode;

/*存取权限*/

unsigned short di_uidunsigned short di_gid;

unsigned long di_size;

/*文件大小*/unsigned int di_addr[NADDR];

/*物理块号*/

}

3)目录项结构structdirect

{ char d_name[DIRSIZ];

/*目录名*/unsigned int d_ino;

/*目录号*/

4)超级块structfilsys

{ unsignedshort s_isize;

/*i节点块块数*/unsignedlong s_fsize;

/*数据块块数*/

unsignedint s_nfree;

/*空闲块块数*/

unsignedshort s_pfree;

/*空闲块指针*/unsignedint s_free[NICFREE];

/*空闲块堆栈*/unsignedint s_ninode;

/*空闲i节点数*/

unsignedshort s_pinode;

/*空闲i节点指针*/unsignedint s_inode[NICINOD];

/*空闲i节点数组*/unsignedint s_rinode;

/*铭记i节点*/

char s_fmod;

/*超级块修改标记*/

5)用户密码struct pwd

{ unsigned short p_uid;

unsigned short p_gid;

charpassword[PWOSIZ];

};

6)目录structdir

{ struct direct direct[DIRNUM];

intsize;

7)查找内存i节点的hash表

structhinode

{ struct inode *i_forw;

8)系统打开表structfile

{ char f_flag;

/*文件操作标志*/unsigned int f_count;

struct inode *f_inode;

/*指向内存i节点*/

unsigned long f_off;

/*读/写指针*/

9)用户打开表structuser

{ unsignedshortu_default_mode;

unsignedshortu_uid;

/*用户标志*/

unsignedshortu_gid;

/*用户组标志*/unsignedshortu_ofile[NOFILE];

/*用户打开表*/

【2】主要的一些函数

1、i节点内容获取函数iget()

2、i节点内容释放函数iput()3、目录创建函数mkdir()

4、目录搜索函数namei()

5、磁盘块分配函数balloc()6、磁盘块释放函数bfree()

7、分配i节点区函数ialloc()8、释放i节点区函数ifree()

9、搜索当前目录下文件的函数iname()10、访问控制函数access()

11、显示目录和文件用函数_dir()

12、改变当前目录用函数chdir()

13、打开文件函数open()14、创建文件函数create()15、读文件用函数read()16、写文件用函数write()17、用户登录函数login()

18、用户退出函数logout( )19、文件系统格式化函数format()

20、进入文件系统函数install()21、关闭文件系统函数close()

22、退出文件系统函数halt()23、文件删除函数delete()

login

选择操作

Dir

Chdir

Mkdir

Creat

Write

Close

Delete

logout

halt

结束

(3)详细设计及少数重要编码的说明

【1】头文件filesys.h的设计:

它包括文件系统中的数据结构,常量,全局变量等申明。

例如:

1)i节点

unsigned int i_ino;

unsigned int i_count;

2)常量的设置:

#defineBLOCKSIZ512

#defineSYSOPENFILE40

#defineDIRNUM128

#defineDIRSIZ14

#definePWDSIZ12

#definePWDNUM32

#defineNOFILE20

#defineNADDR10

#defineNHINO128 /*mustbepowerof2*/#defineUSERNUM10

#defineDINODESIZ32

【2】主函数模块(main.c):

其中重要部分代码:

printf("

begin:

\n"

);

\nDoyouwanttoformatthedisk?

if(getchar()=='

y'

\nFormatwillerasecontextonthedisk\nAreyousure?

getchar();

if((c=getchar())=='

{

formatstarts\n"

format();

iHave_formated=1;

printf("

formatended\n"

else

receivedchar:

%cfromstdin\n"

c);

step1ended\n"

install();

step2ended\n"

_dir();

step3ended\n"

login(2118,"

abcd"

user_id=0;

step4ended\n"

mkdir("

a2118"

_dir();

step5-1ended\n"

chdir("

step5-2ended\n"

ab_fd1=creat(2118,"

ab_file0.c"

01777);

step6ended\n"

buf=(char*)malloc(BLOCKSIZ*6+5);

step7ended\n"

write(2118,ab_fd1,buf,BLOCKSIZ*6+5);

step8ended\n"

close(2118,ab_fd1);

【3】初始化磁盘格式模块(format.c):

其中的一下重要的算法:

/*给main()中的密码表pwd[PWDNUM]填入内容*/pwd[0].p_uid=2116;

pwd[0].p_gid=03;

strcpy(pwd[0].password,"

dddd"

pwd[1].p_uid=2117;

pwd[1].p_gid=03;

strcpy(pwd[1].password,"

bbbb"

pwd[2].p_uid=2118;

pwd[2].p_gid=04;

strcpy(pwd[2].password,"

pwd[3].p_uid=2119;

pwd[3].p_gid=04;

strcpy(pwd[3].password,"

cccc"

pwd[4].p_uid=2220;

pwd[4].p_gid=05;

strcpy(pwd[4].password,"

eeee"

开始

Buf是为null?

初始化用户登录

创建主目录和副目录

初始化超级块

该模块的流程图:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1