操作系统实验文件管理c++代码

上传人:第*** 文档编号:33582929 上传时间:2018-02-15 格式:DOCX 页数:19 大小:24.53KB
返回 下载 相关 举报
操作系统实验文件管理c++代码_第1页
第1页 / 共19页
操作系统实验文件管理c++代码_第2页
第2页 / 共19页
操作系统实验文件管理c++代码_第3页
第3页 / 共19页
操作系统实验文件管理c++代码_第4页
第4页 / 共19页
操作系统实验文件管理c++代码_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《操作系统实验文件管理c++代码》由会员分享,可在线阅读,更多相关《操作系统实验文件管理c++代码(19页珍藏版)》请在金锄头文库上搜索。

1、#include #include #include #include #includeusing namespace std;#define BLKSIZE 512 / 数据块的大小 #define BLKNUM 512 / 数据块的块数#define INODESIZE 32 / i 节点的大小#define INODENUM 32 / i 节点的数目#define FILENUM 8 / 打开文件表的数目/用户 typedef structchar user_name10; / 用户名char password10; / 密码 User;/i 节点 typedef structshort

2、 inum; / 文件 i 节点号char file_name10; / 文件名char type; / 文件类型char user_name10; / 文件所有者short iparent; / 父目录的 i 节点号 short length; / 文件长度short address2; / 存放文件的地址 Inode;/打开文件表 typedef structshort inum; / i 节点号char file_name10; / 文件名short mode; / 读写模式(1:read, 2:write,/ 3:read and write) File_table;/ 申明函数voi

3、d login(void);void init(void);int analyse(char *);void save_inode(int);int get_blknum(void);void read_blk(int);void write_blk(int);void release_blk(int);void pathset();void del(int);/ 用户命令处理函数 void help(void);void cd(void);void dir(void);void mkdir(void);void creat(void);void open(void);void read(vo

4、id);void write(void);void close(void);void delet(void);void logout(void);void command(void);void quit();/main.cpp 文件/#include head.h/定义全局变量 char choice;int argc; / 用户命令的参数个数char *argv5; / 用户命令的参数int inum_cur; / 当前目录char temp2*BLKSIZE; / 缓冲区User user; / 当前的用户char bitmapBLKNUM; / 位图数组Inode inode_array

5、INODENUM; / i 节点数组File_table file_arrayFILENUM; / 打开文件表数组char image_name10 = data.dat; / 文件系统名称FILE *fp; / 打开文件指针/创建映像 hd,并将所有用户和文件清除void format(void)int i;Inode inode;printf(Will be to format filesystem.n);printf(WARNING:ALL DATA ON THIS FILESYSTEM WILL BE LOST!n);printf(Proceed with Format(Y/N)?);

6、scanf(%c, getchar(); if(choice = y) | (choice = Y)if(fp=fopen(image_name, w+b) = NULL)printf(Cant create file %sn, image_name);exit(-1);for(i = 0; i 512)add1 = inode_arraynum.address1;if(fp = fopen(image_name, r+b) = NULL)printf(Cant open file %s.n, image_name);exit(-1);fseek(fp, BLKSIZE+INODESIZE*I

7、NODENUM +add0*BLKSIZE, SEEK_SET);ch = fgetc(fp);for(i=0; (i = 512)fseek(fp,BLKSIZE+INODESIZE*INODENUM+add1*BLKSIZE, SEEK_SET);ch = fgetc(fp);for(; (i 0)&(inode_arrayi.type=d)&(inode_arrayi.iparent=inum_cur)& !strcmp(inode_arrayi.file_name,argv1)&!strcmp(inode_arrayi.user_name,user.user_name)break;if

8、(i = INODENUM) printf(This directory isnt exsited.n);else inum_cur = i;/ 功能: 显示当前目录下的子目录和文件(dir)void dir(void)int i;int dcount=0,fcount=0;short bcount=0;if(argc != 1)printf(Command dir must have one args. n);return ;/ 遍历 i 节点数组 , 显示当前目录下的子目录和文件名for(i = 0; i 0) & (inode_arrayi.iparent = inum_cur)&!st

9、rcmp(inode_arrayi.user_name,user.user_name)if(inode_arrayi.type = d)dcount+;printf(%-20sn, inode_arrayi.file_name);elsefcount+;bcount+=inode_arrayi.length;printf(%-20s%12d bytesn, inode_arrayi.file_name,inode_arrayi.length);printf(n %d file(s)%11d bytesn,fcount,bcount);printf( %d dir(s) %11d bytes F

10、reeSpacen,dcount,1024*1024-bcount);/ 功能: 在当前目录下创建子目录(mkdir dir1)void mkdir(void)int i;if(argc != 2)printf(command mkdir must have two args. n);return ;/ 遍历 i 节点数组 , 查找未用的 i 节点for(i = 0; i 0) &(inode_arrayi.type = f) &!strcmp(inode_arrayi.file_name, argv1)printf(This file is exsit.n);return ;for(i =

11、0; i 0) &(inode_arrayi.type = f) &!strcmp(inode_arrayi.file_name,argv1)&!strcmp(inode_arrayi.user_name,user.user_name)break;if(i = INODENUM)printf(The file you want to open doesnt exsited.n);return ;inum = i;printf(Please input open mode:(1: read, 2: write, 3: read and write):);scanf(%d, getchar();i

12、f(mode 3)printf(Open mode is wrong.n);return;for(i = 0; i 0) & !strcmp(file_arrayi.file_name,argv1)break;if(i = FILENUM)printf(Open %s first.n, argv1);return ;else if(file_arrayi.mode = 2)printf(Cant read %s.n, argv1);return ;inum = file_arrayi.inum;printf(The length of %s:%d.n, argv1, inode_arrayin

13、um.length);if(inode_arrayinum.length 0)read_blk(inum);for(i = 0; (i 0)&!strcmp(file_arrayi.file_name,argv1) break;if(i = FILENUM)printf(Open %s first.n, argv1);return ;else if(file_arrayi.mode = 1)printf(Cant write %s.n, argv1);return ;inum = file_arrayi.inum;printf(The length of %s:%dn, inode_array

14、inum.file_name, inode_arrayinum.length);if(inode_arrayinum.length = 0)i=0;inode_arrayinum.address0 = get_blknum();printf(Input the data(CTRL+Z to end):n);while(i 512)inode_arrayinum.address1 = get_blknum();save_inode(inum);write_blk(inum);elseprintf(This file cant be written.n);/ 功能: 关闭已经打开的文件(close file1)void close(void)int i;if(argc != 2)printf(Command close must have two args. n);return ;for(i = 0; i 0) if(i = FILENUM)printf(This file doesnt be opened.n);return ;else file_arrayi.inum = -1;

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

当前位置:首页 > 办公文档 > 解决方案

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