操作系统文件系统课程设计报告后附源代码副本_第1页
操作系统文件系统课程设计报告后附源代码副本_第2页
操作系统文件系统课程设计报告后附源代码副本_第3页
操作系统文件系统课程设计报告后附源代码副本_第4页
操作系统文件系统课程设计报告后附源代码副本_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机操作系统课程设计报告设计项目名称: 文件系统设计 专 业: 网络工程 班级:201001学号:7; 1姓名:世波流男指 导 教 师: 瑞 红目录1 课程设计简介 11.1 课程设计的目的 11.2 课程设计容 12 数据结构的设计 22.1 预定义 22.2 结构体 22.3 全局变量和函数 23 功能模块(或算法)描述 53.1 模块划分 43.2 模块流程图 64 程序运行结果 85 心得体会 9参考文献 10附源代码 111 课程设计简介1.1 课程设计的目的课程设计目的使学生熟悉文件管理系统的设计方法; 加深对所学各种文件操作的了 解及其操作方法的特点。 通过模拟文件系统的实现,

2、 深入理解操作系统中文件系统的理论知 识, 加深对教材中的重要算法的理解。 同时通过编程实现这些算法 ,更好地掌握操作系统的原 理及实现方法 ,提高综合运用各专业课知识的能力。1.2 课程设计容课程设计容设计一个简单的多用户文件系统。即在系统中用一个文件来模拟一个磁盘;此系统至少有: Create、 delete、 open、 close、read、 write 等和部分文件属性的功能。 实现这个文件系统。能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后, 可以实现设计的操作要求。1)设计一个 10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开

3、 5个文件。2)程序采用二级文件目录(即设置主目录MFD )和用户文件目录( UFD )。另外,为打开文件设置了运行文件目录( AFD )。3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进 行实际的读写操作。4)因系统小,文件目录的检索使用了简单的线性搜索。5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为 0,则表示不允许读写、执行。6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD 、UFD ),打开文件目录( AFD )即运行文件目录,如图 5.1 所示。2 数据结构的设计2.1 预定义#define BLOCKSIZ 5

4、12/磁盘块的大小#define DATABLKNUM 512#define BLKGRUPNUM 50#define P_N_BLOCKS 15/数据块的数目 /数据块组包含多少数据块 /inode 节点中 指向数据块的指针个数#define GROUPNUMDATABLKNUM/BLKGRUPNUM+1 / 数据块组 组数#define DINODESIZ 512/磁盘 i 结点区的大小(空间 32 512)#define DINODENUM 32/ 磁盘 i 结点区的块数#define SYSOPENFILE 40#define DIRNUM32/一个目录下的最多目录和文件的总和数#de

5、fine DIRSIZ 14#define UPWDSIZ 15/文件、目录名的长度 (字节 )/密码的长度#define UNAMSIZ15/用户名的长度#define PWDSIZsizeof(struct pwd) / 密码结构的长度#define PWDNUMBLOCKSIZ/PWDSIZ/ 密码数据空间的大小( pwd 为单位)#define NOFILE20/一个用户最多可以打开的文件数目#define DINODESTART 4*BLOCKSIZ/i 结点区的开始地址 -inodes table ,1引导 2 超块 3block bitmap 4inode bitmap#defi

6、ne DATASTART (2+DINODENUM)*BLOCKSIZ/数据区的开始地址#define DATASTARTNO36/数据区开始指针#define DIMODE_EMPTY00000/* 可以用的空间 */#define DIMODE_FILE00001#define DIMODE_DIR00002#define DIMODE_PASSWD00004#define GRUP_00#define GRUP_11#define GRUP_22#define GRUP_44/管理员组2.2 结构体/磁盘 i 结点结构, struct inode/chardi_nameDIRSIZ;un

7、signed _int16di_ino; /* 磁盘 i 节点标识 */unsigned _int16di_number; /* 关联文件数,当为0 时表示删除文件 */unsigned _int16di_mode; /* 存取权限 */unsigned _int16di_uid; /* 磁盘 i 节点用户 id*/unsigned _int16di_gid; /*磁盘 i 节点权限组 id*/ /1管理员组2 用户组unsigned _int32di_size; /* 文件大小 */unsigned _int32di_ctime; /* Creation time */unsigned _i

8、nt32di_mtime; /* Modification time */unsigned _int16di_blockP_N_BLOCKS; /* 一组block 指针*/;/ 目录项结构struct directchar d_nameDIRSIZ;/*目录名( 14 字节) */_int16 d_ino; /* 目录号 */;/超级快结构/* inodes 计数 */* blocks 计数 */* 保留的 blocks 计数 */struct super_blockunsigned _int16 s_inodes_count;unsigned _int16 s_blocks_count;u

9、nsigned _int16 s_r_blocks_count;unsigned _int16 s_free_blocks_count; / 空闲的 blocks 计数unsigned _int16 s_free_inodes_count; /* 空闲的 inodes 计数 */unsigned _int16 s_free_blocks_groupGROUPNUM;/ 新增 一个数组来记录每个数据块组中的空 闲数据块计数unsigned _int16 s_first_data_block; /* 第一个数据 block */unsigned _int16 s_log_block_size; u

10、nsigned _int16 s_blocks_per_group; unsigned _int16 s_inodes_per_group; ;/* block 的大小 */* 每 block group 的 block 数量 */* 每 block group 的 inode 数量 */ 用户密码struct pwdunsigned _int8 p_uid;unsigned _int8 p_gid;char usernameUNAMSIZ;/* 用户名 新加的 */ char passwordUPWDSIZ;/ 目录结构 struct dirstruct direct directDIRNU

11、M;_int16 size;2.3 全局变量和函数/ 全局变量unsigned _int8 di_bitmapDINODENUM;/ 硬盘 inode 节点位图 1 表示已使用 0 表示未使用unsigned _int8 bk_bitmapDA TABLKNUM;/ 数据块 block 位图struct super_block filsys;/超级块struct pwd pwdPWDNUM;FILE *fd;/文件指针struct inode *cur_inode;/i 节点当前目录指针struct inode *inodetemp;/i 节点指针const char fsystemname2

12、0=Linux.EXT2;/ 模拟硬盘的文件名struct direct dir_bufBLOCKSIZ / sizeof(struct direct);/ 目录数组char cmdhead20;/cmd 的头 表示所在哪个文件夹 、 int i_lock=0;/inode 位图锁 可能会多线程 int b_lock=0;/block 位图锁 struct pwd *cur_user;/* 全局函数 */ extern int Format();/ 格式化磁盘 extern int Install();/ 启动,安装文件系统 struct inode * read_inode(int);/in

13、stall 里面读取文件 dinode struct direct * read_dir_data(int);/ 读取存储文件夹的物理块 extern void showdir();/ 命令 dir int Enterdir(char);/ 进入某个文件夹 命令 - cd 文件名 int Fd_dirfile(char);/ 查找当前目录里的文件 没找到返回 -1 找到返回 inode 号 int Iscmd(char);/ 判断是否两个字符串的命令 void two_cmd(char,char);/ 两个字符串的命令 int creat(char);/ 创建文件 void changeino

14、de();/ 交换指针 char * ReadFile(char);/ 读取文件 int mkdir(char);/ 创建文件夹 void showbitmap();/ 显示位图 int deletefd(char);/ 删除文件 int editfile(char);/ 编辑文件 int rename(char);/ 重命名 void showhelp();/ 命令帮助 void login();void logout(); int access();/ 权限判断 /* 磁盘 i 节点的分配与释放(当一个新文件被建立的时候,在给该文件分配磁盘存储区之前, 应为该文件分配存放该文件说明信息的磁

15、盘 i 节点,当从文件系统中删除某个文件时, 应首先删除它的磁盘 i 节点项。) */int ialloc();/* 开辟一个空闲的 i 节点,返回 i 节点*/ 磁盘块分配与释放函数 int balloc(int);/ 申请硬盘空间结构体说明:硬盘模拟文件: 每个数据块 512 字节,第一个数据块空闲备用,第 2 块是超级块,第 3 块是 inode 位图, 第4块是 block 位图,第 5块开始有 32块是 inode节点,然后是数据区 block,512块。超级块: 存放整个文件系统的基本状态,如: inode 块数, block 总块数,空闲的 block 计数,空闲的 inode

16、计数,每个数据块组中的空闲块数(为 block 分组,便于读取) ,每个 block 的大小( 512 字节),每个数据 块组的 block 块数。Inode 位图: 用一个数组来描述每个 inode 的使用状况, 1 表示被占用, 0 表示空闲。Block 位图: 用一个数组来描述每个数据区的 block 的使用状况, 1 表示被占用, 0 表示空闲。 inode 节点: inode 记录了文件或者目录在数据区存放位置,是文件还是目录,是否系统文件,属于管理员 组还是普通用户组,是由谁创建的,创建时间等。如果是目录,则还记录了里面包含多少个文件或子目录。 是文件则记录了文件的大小。读取文件要

17、先通过 inode 然后找到 block ,才能读取。Block 数据块:存放文件的地方, 如果是目录则记录了这个目录下所有的文件和子目录的名称和所占的 inode 如果是文本文档,则是字节流文件。3 功能模块(或算法)描述我负责整体设计 ,实现底层具体设计, format 格式化, install 安装, login 登录, ialloc 申请 inode 空间, balloc 申请 block 空间。3.1 format 格式化只写打开模拟文件,初始化超级快,初始化 dinode 位图 block 位图,初始化主目录,初始化 etc 目录,初 始化管理员 admin 目录,初始化用户 xi

18、ao 目录,初始化 用户 passwd 文件,写入模拟硬盘文件。3.2 install 安装读写打开模拟文件,读取 dinode 位图 block 位图,读取主目录,读取 etc 目录,读取管理员 admin 目录, 读取用户 xiao 目录,读取 用户 passwd 文件。3.3 login 登陆 用户输入用户名和密码,在 passwd 文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定 到当前用户文件夹下。登录流程图3.4 ialloc 申请 inode 空间先检测 inode 位图是否加锁,是则退出。加锁,检测 inode 空间是否还有已满,是则退出。在 inode 位图中

19、顺序查找空闲的 inode ,找到则返回 inode地址, block 解锁。函数结束。流程图 3.3Login 登录是是输入用户名用户名输入密码密码是否正确是,登录成功结束登录流程图Ialloc inode空间Inode位图是否加锁否,加锁否在 ionde 位图顺序查 找空闲的 inodeInode空间是否已满找到返回 inode地址Inode位图解锁结束ialloc申请失败找不到流程图 3.3Balloc(int k)申请 k个 block 空间否,加锁Block 位图是否加锁有 k个空闲的否block在 block 位图按照分 组查找空闲的 block找到返回 block 地址Block

20、 位图解锁结束找不申到请失败balloc 流程图 3.43.5 balloc 申请 block 空间先检测 block 位图是否加锁,是则退出。加锁,检测 block 空间是否还有 k 个空闲,否则退出。在还有空闲 block 的组中查找是否有 k 个空闲,没有则去下一个 block 组中查找,找到则返回 block 地址, block 解锁。 函数结束。流程图 3.43.5 create 创建文本文件查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件容,以#结束。申请 inode 空间( ialloc 函数) ,申请硬盘 block 空间( balloc 函数),申请失败则结束。

21、将文件容写入 inode 空间和 block 空间。修改当前目录的结构,修改超级快,修改 inode 位图, block 位图,写入模拟硬盘。流程图 3.53.7 cdir 创建文件夹 查找当前目录下是否有同名文件, 是则退出,否则,申请 inode空间(ialloc 函数),申请硬盘 block 空间( balloc 函数),申请失败则结束。将文件夹容写入inode 空间和 block 空间。修改当前目录的结构,修改超级快,修改 inode 位图, block 位图,写入模拟硬盘。3.7 read edit 读取和追加文本文件Read 查找当前目录下是否该文件,没有则退出,否则调用acces

22、s()权限判断,有权限则判断是不是文件,不是则退出,是文件则读取文件并显示。Edit调用读取文件模块, 读取成功则用户输入追加的容, 如果追加的容大于一个 block 则申请 block 空间,失败则退出,申请成功则保存文件。3.8 access (文件名) 权限判断 先判断当前目录是否有该文件,在当前目录的 block 找到该文件,判断当前登录用户是哪个组,判断是否 该用户创建,判断该文件的可见级别。如果是该用户创建的 则有读写权限如果当前用户是管理员组的 也具有读写权限如果该文件是用户可查看文件则都具有权限。3.9 cd 进入子目录 或上级目录查找当前目录是否有该子目录,没有则退出,调用a

23、ccess()判断当前用户是否有权限,无则退出,有则读取该子目录的 inode ,将当前目录指向该目录。3.10 attr (文件名)查看文件或者文件夹的属性 先查找当前目录下是否有该文件或目录,有则判断文件是否系统文件,是否文本文件,是否目录,由谁创 建,属于什么组,占用的 block ,和 inode。将其全部显示出来。3.9 del 删除文件或目录查找当前目录是否有该文件名,没有则退出,有则调用access()判断是否有权限,有则判断是否为系统文件,是则无法删除,不是则判断是否是文件,是文件则直接删除,不是则判断是否文件夹,是文件夹则 判断该文件夹下是否有文件,有文件则无法删除。提示用户

24、是否删除,确认则删除文件,修改当前文件夹 inode ,block 结构,修改该文件占有的 inode 和 block 位图为 0,修改超级块,写入模拟硬盘。流程图 3.9 3.8 access (文件名) 权限判断先判断当前目录是否有该文件,在当前目录的 block 找到该文件,判断当前登录用户是哪个组,判断是否 该用户创建,判断该文件的可见级别。如果是该用户创建的 则有读写权限如果当前用户是管理员组的 也具有读写权限如果该文件是用户可查看 文件则都具有权限。4 程序运行结果1 格式化 和登录界面 登录后显示帮助信息 ,进入到用户文件夹下2 dir 命令 - 显示当前目录下的文件和目录3 l

25、ogout 命令 - 注销用户普通用户无法进入 admin 管理员目录。5 心得体会 操作系统课程设计是本课程重要的实践教学环节。 课程设计的目的, 一方面使学生更透彻地 理解操作系统的基本概念和原理, 使之由抽象到具体; 另一方面, 通过课程设计加强学生的 实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。与 本课程的实验教学相比, 课程设计独立设课, 具有更多的学时,给学生更多自行设计、 自主 实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。 在设计的过程中遇到问题, 可以说得是困难重重, 难免会遇到过各种各样的问题, 同时在设 计

26、的过程中发现了自己的不足之处, 对以前所学过的知识理解得不够深刻, 掌握得不够牢固, 不过设计终于顺利完成了, 在设计中遇到了很多编程问题, 最后在老师的辛勤指导下, 终于 游逆而解。同时,在老师的身上我学得到很多实用的知识,再次我表示感!同时,对给过我 们帮助的所有同学和各位指导老师再次表示忠心的感!参考文献1袁庆龙,候文义 Ni-P 合金镀层组织形貌及显微硬度研究 理工大学 学报,2001,32(1):51-53. (连续出版物:序号 主要责任者文献题 名 J刊名,出版年份,卷号 ( 期号) :起止页码)2国钧,王连成图书馆史研究 :高等教育, 1979:15-18 ,31(专 著:序号

27、主要责任者文献题名 出版地:出版者,出版年:起 止页码)3品一高校学报编辑工作现代化特征 中国高等学校自然科学学报研 究会科技编辑学论文集 (2) :师大学, 1998:10-22 (论文集: 序号 主 要责任者文献题名 主编论文集名出版地:出版者,出版年:起 止页码)附:源代码/*makefile*/ filsys:main.o igetput.o iallfre.o ballfre.o name.o acess.o log.o close.ocreate.o delete.o dir.o dirlt.o open.o rdwt.o format.o install.o halt.occ -

28、o filsys main.o igetput.o iallfre.o ballfre.o name.o acess.o log.o close.o create.o delete.o dir.o dirlt.o open.o rdwt.o format.o install.o halt.omain.o:main.c filesys.hcc -c main.c igetput.o:igetput.c filesys.hcc -c igetput.c iallfre.o:iallfre.c filesys.hcc -iallfre.c ballfre.o:ballfre.c filesys.hc

29、c -c ballfre.c name.o:name.c filesys.hcc -c name.c access.o:access.c filesys.hcc -c access.clog.o:log.c filesys.hcc -c log.c close.o:close.c filesys.hcc -c close.c create.o:create.c filesys.hcc -c create.c delete.o:delete.c filesys.hcc -c delete.c dir.o:dir.c filesys.hcc -c dir.c dirlt.o:dirlt.c fil

30、esys.hcc -c dirlt.c open.o:open.c filesys.hcc -c open.c rdwt.o:rdwt.c filesys.hcc -c rdwt.c format.o:format.c filesys.hcc -c format.c install.o:install.c filesys.hcc -c install.chalt.o:halt.ccc -c halt.c/*filesys.h*/#define BLOCKSIZ 512#define SYSOPENFILE 40#define DIRNUM 128#define DIRSIZ 14#define

31、 PWDSIZ 12#define PWDNUM 32#define NOFILE 20#define NADDR 10#define NHINO 128#define USERNUM 10#define DINODESIZ 32/*filesys*/#define DINODEBLK 32#define FILEBLK 512#define NICFREE 50#define NICINOD 50#define DINODESTART 2*BLOCKSIZ#define DATASTART(2+DINODEBLK)*BLOCKSIZ /*di_mode*/#define DIEMPTY 00

32、00#define DIFILE 01000#define DIDIR 02000#define UDIREAD 00001#define UDIWAITE 00002#define UDIEXICUTE 00004#define GDIREAD 00010#define GDIWRITE 00020#define GDIEXICUTE 00040#define ODIREAD 00100#define ODIWRITE 00200#define ODIEXICUTE 00400#define READ 1#define WRITE2#define EXICUTE 4#define DEFAU

33、LTMODE 00777 /*i_flag*/#define IUPDATE 00002 /*s_fmod*/#define SUPDATE 00001/*f_flag*/#define FREAD 00001 #define FWRITE 00002 #define FAPPEND 00004/*error*/#define DISKFULL 65535/*fseek origin*/#define SEEK_SET 0sruct inodestruct inode *i_forw; struct inode*i_back; char i_flag;unsigned int i_ino; u

34、nsigned int i_count; unsigned short di_number; unsigned short di_mode; unsigned short di_uid; unsigned short di_gid; unsigned int di_size; unsigned int di_addrNADDR; ;struct dinodeunsigned short di_number; unsigned short di_mode; unsigned short di_uid; unsigned short di_gid; unsigned long di_size; u

35、nsigned int di_addrNADDR; ;struct directunsigned d_nameDIRSIZ; unsigned int d_ino;struct filsysunsigned short s_isize; unsigned long s_fsize;unsigned int s_nfree;unsigned short s_pfree; unsigned int s_freeNICFREE;unsigned int s_ninode; unsigned short s_pinode;unsigned int s_inodeNICINOD; unsigned in

36、t s_finode;char s_fmod;struct pwdunsigned short p_uid;unsigned short p_gid; unsigned passwordPWOSIZ;struct dirstruct direct directDIRNUM;int size;struct hinodestruct inode* i_forw;struct filechar f_flag;unsigned int f_count;struct inode *f_inode;unsigned long f_off;struct userunsigned short u_defaul

37、t_mode;unsigned short u_uid;unsigned short u_gid; unsigned short u_ofileNOFILE; ;extern struct hinode hinodeNHINO; extern struct dir dir;extern struct file sys_ofileSYSOPENFILE; extern struct filsys filsys;extern struct pwd pwdPWDNUM;extern struct user userUSERNUM; extern FILE *fd;extern struct inod

38、e *cur_path_inode; extern int user_id,file_block;extern struct inode *iget();extern iput();extern unsigned int balloc();extern bfree();extern struct inode *ialloc();extern ifree();extern unsigned int namei();extern unsigned int iname();extern unsigned int access();extern _dir();extern mkdir();extern

39、 chdir();extern dirlt();extern unsigned short open();extern create();extern unsigned int read();extern unsigned write();extern int login();extern logout();extern install();extern format();extern close();extern halt();#include#include#includefilesys.hstruct hinode hinodeNHINO;struct dir dir;struct fi

40、le sys_ofileSYSOPENFILE; struct filsys filsys;struct pwd pwdPWDNUM;struct user userPWDNUM;FILE *fd;struct inode* cur_path_inode;int user_id,file_block;main()unsigned short ab_fd1,ab_fd2,ab_fd3,ab_fd4;unsigned short bhy_fd1;char *buf; printf(nDo you want to format the diskn); if(getchat()=y)printf(Fo

41、rmat will erase all context on the disk.Are you sure?n); getchar(); else return;if(getchar()=y) formar();else retrun; install();_dir(); login(2118,abcd); user_id=0;mkdir(a2118); chdir(a2118);ab_fd1=creat(user_id,file0.c,01777); file_block=BLOCKSIZ*6+5;buf=(char*)malloc(BLOCKSIZ*6+5); write(ab_fd1,bu

42、f,BLOCKSIZ*6+5); close(user_id,ab_fd1);free(buf);mkdir(subdir);chdir(subdir);ab_fd2=creat(user_id,file1.c,01777);file_block=BLOCKSIZ*4+20;buf=(char*)malloc(BLOCKSIZ*4+20);write(ab_fd2,buf,BLOCKSIZ*4+20);close(user_id,ab_fd2);free(buf);chdir(.);ab_fd3=creat(user_id,file2.c,01777); file_block=BLOCKSIZ

43、*3+255;buf=(char*)malloc(BLOCKSIZ*3+255); write(ab_fd3,buf,BLOCKSIZ*3+255);close(user_id,ab_fd3);free(buf);_dir();delete(ab_file0.c);ab_fd4=creat(user_id,file3.c,01777); file_block=BLOCKSIZ*8+300;buf=(char*)malloc(BLOCKSIZ*8+300);write(ab_fd4,buf,BLOCKSIZ*8+300); close(user_id,ab_fd4);free(buf);_dir

44、();ab_fd3=open(user_id,file2.c,FAPPEND); file_block=BLOCKSIZ*3+100;buf=(char*)malloc(BLOCKSIZ*3+100);write(ab_fd3,buf,BLOCKSIZ*3+100); close(user_id,ab_fd3);free(buf);_dir();chdir(.);logout();halt();#include#includefilesys.hformat()struct inode *inode;struct direct dir_bufBLOCKSIZ/(DIRSIZ+2);struct

45、files;unsigned int block_bufBLOCKSIZ/sizeof(int);char *buf;int i,j;fd=fopen(filesystem,r+w+b);buf=(char*)malloc(DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char); if(buf=NULL)printf(nfile system file creat failed! n);exit(0);fseek(fd,0,SEEK_SET); fwrite(buf,1,(DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char),fd)

46、;pwd0.p_uid=2116;pwd0.p_gid=03;strcpy(pwd0.password,dddd);pwd1.p_uid=2117;pwd1.p_gid=03;strcpy(pwd1.password,bbbb);pwd2.p_uid=2118;pwd2.p_gid=04;strcpy(pwd2.password,abcd);pwd3.p_uid=2119;pwd3.p_gid=04;strcpy(pwd3.password,cccc);pwd4.p_uid=2220;pwd4.p_gid=05;strcpy(pwd4.password,eeee);inode=iget(1);

47、inode-di_number=1; inode-di_mode=DEFAULTMODE|DIDIR; inode-di_size=3*(DIRSIZ+2);inode-di_addr0=0;strcpy(dir_buf0.d_name,.);dir_buf0.d_ino=1;strcpy(dir_buf1.d_name,.);dir_buf1.d_ino=1;strcpy(dir_buf2.d_name,ect);dir_buf2.d_ino=2; fseek(fd,DATASTART,SEEK_SET); fwrite(dir_buf,1,3*(DIRSIZ+2),fd);iput(ino

48、de);inode=iget(2);inode-di_number=1; inode-di_mode=DEFAULTMODE|DIDIR; inode-di_size=3*(DIRSIZ+2);inode-di_addr0=1; strcpy(dir_buf0.d_name,.);dir_buf0.d_ino=1; strcpy(dir_buf1.d_name,.);dir_buf1.d_ino=2; strcpy(dir_buf2.d_name,password);dir_buf2.d_ino=3;fseek(fd,DATASTART+BLOCKSIZ*1,SEEK_SET); fwrite

49、(dir_buf,1,3*(DIRSIZ+2),fd);iput(inode);inode=iget(3); inode-di_number=1; inode-di_mode=DEFAULTMODE|DIDIR; inode-di_size=BLOCKSIZ; inode-di_addr0=2;for(i=5;i,PWDNUM;i+)pwdi.p_uid=0;pwdi.p_gid=0; strcpy(pwdi.password, ) fseek(fd,DATASTART+2*BLOCKSIZ,SEEK_SET); fwrite(pwd,1,BLOCKSIZ,fd);iput(inode);fi

50、lsys.s_isize=DINODEBLK;filsys.s_fsize=FILEBLK;filsys.s_ninode=DINODEBLK;filsys.s_nfree=FILEBLK-3;for(i=0;iNICINOD;i+) filsys.s_inodei=4+i;filsys.s_pinode=0; filsys.s_rinode=NICNOD+4; block_bufNICFREE-1=FILEBLK+1; for(i=0;iiNICFREE-1;i+) for(j=0;j2;i-) filsys.s_freeNICFREE-1+i-j=i;filsys.s_pfree=NIVF

51、REE-1-j+3; filsys.s_pinode=0;fseek(fd,BLOCKSIZ,SEEK_SET); fwrite(&filsys,1sizeof(filsys),fd); fseek(fd,BLOCKSIZ,SEEK_SET); fread(&filsys.s_size,a,sizeof(filsys),fd);#include#include#includefilsys.hinstall()int i,j;fseek(fd,BLOCKSIZ,SEEK_SET);fread(&filsysk,1,sizeof(struct filsys),fd);for(i=0;iNHINO;

52、i+)hinodei.i_forw=NULL;for(i=0;iSYSOPENFILE;i+)sys_ofilei.f_count=0; sys_ofilei.f_inode=NULL;for(i=0;iUSERNUM;i+)useri.u_uid=0;useri.u_gid=0;for(j=0;jdi_size/(DIRSIZ+2);for(i=0;iDIRNUM;i+) strcpy(dir.directi.d_name,); dir.directi.d_ino=0; for(i=0;idi_addri,SEEK_SET); fread(&dir.directBLOCKSIZ/(DIRSIZ+2)*i1,BLOCKSIZ,fd); fseek(fd,DATASTART+BLOCKSIZ*cur_path_inode-di_addri,SEEK_SET);fread(&dir.direct(BLOCKSIZ)/(DIRSIZ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论