操作系统实验文件管理C++代码
更新时间:2023-09-14 13:55:01 阅读量: 初中教育 文档下载
- 操作系统推荐度:
- 相关推荐
#include
using namespace std;
#define BLKSIZE 512 #define BLKNUM 512 #define INODESIZE 32 #define INODENUM 32 #define FILENUM 8
//用户
typedef struct {
// 数据块的大小 // 数据块的块数 // i节点的大小 // i节点的数目 // 打开文件表的数目
char user_name[10]; // 用户名 char password[10]; // 密码 } User;
//i节点 typedef struct { short inum; // 文件i节点号 char file_name[10]; // 文件名 char type; // 文件类型 char user_name[10]; // 文件所有者 short iparent; // 父目录的i节点号 short length; // 文件长度 short address[2]; // 存放文件的地址 } Inode;
//打开文件表 typedef struct {
short inum; // i节点号 char file_name[10]; // 文件名 short mode; // 读写模式(1:read, 2:write, // 3:read and write) } File_table;
// 申明函数 void 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(void); void write(void); void close(void); void delet(void); void logout(void); void command(void); void quit();
//main.cpp文件
//#include \
//定义全局变量 char choice; int argc; // 用户命令的参数个数 char *argv[5]; // 用户命令的参数 int inum_cur; // 当前目录 char temp[2*BLKSIZE]; // 缓冲区 User user; // 当前的用户 char bitmap[BLKNUM]; // 位图数组
Inode inode_array[INODENUM]; // i节点数组 File_table file_array[FILENUM]; // 打开文件表数组 char image_name[10] = \// 文件系统名称 FILE *fp; // 打开文件指针
//创建映像hd,并将所有用户和文件清除 void format(void) { int i;
Inode inode; printf(\ printf(\ printf(\ scanf(\
getchar(); if((choice == 'y') || (choice == 'Y')) { if((fp=fopen(image_name, \ { printf(\ exit(-1); } for(i = 0; i < BLKSIZE; i++) fputc('0', fp); inode.inum = 0; strcpy(inode.file_name, \ inode.type = 'd'; strcpy(inode.user_name, \ inode.iparent = 0; inode.length = 0; inode.address[0] = -1; inode.address[1] = -1; fwrite(&inode, sizeof(Inode), 1, fp); inode.inum = -1; for(i = 0; i < 31; i++) fwrite(&inode, sizeof(Inode), 1, fp); for(i = 0; i < BLKNUM*BLKSIZE; i++) fputc('\\0', fp); fclose(fp);
// 打开文件user.txt if((fp=fopen(\ {
printf(\ exit(-1); } fclose(fp); printf(\ } return ; }
// 功能: 用户登陆,如果是新用户则创建用户 void login(void) {
char *p; int flag; char user_name[10]; char password[10]; char file_name[10] = \ do { printf(\ gets(user_name); printf(\ p=password; while(*p=getch()) {
if(*p == 0x0d) { *p='\\0'; //将输入的回车键转换成空格 break; }
printf(\ //将输入的密码以\号显示 p++; } flag = 0; if((fp = fopen(file_name, \ {
printf(\ printf(\ format(); login(); }
while(!feof(fp)) { fread(&user, sizeof(User), 1, fp);
// 已经存在的用户, 且密码正确 if(!strcmp(user.user_name, user_name) && !strcmp(user.password, password)) { fclose(fp); printf(\ return ; } // 已经存在的用户, 但密码错误 else if(!strcmp(user.user_name, user_name)) { printf(\
flag = 1; fclose(fp); break; } } if(flag == 0) break; }while(flag); // 创建新用户 if(flag == 0) {
printf(\ scanf(\ gets(temp); if((choice == 'y') || (choice == 'Y')) { strcpy(user.user_name, user_name); strcpy(user.password, password); fwrite(&user, sizeof(User), 1, fp); fclose(fp); return ; } if((choice == 'n') || (choice == 'N')) login(); } }
// 功能: 将所有i节点读入内存 void init(void) { int i; if((fp = fopen(image_name, \ { printf(\ exit(-1); } // 读入位图 for(i = 0; i < BLKNUM; i++) bitmap[i] = fgetc(fp); // 显示位图 // 读入i节点信息 for(i = 0; i < INODENUM; i++) fread(&inode_array[i], sizeof(Inode), 1, fp); // 显示i节点 // 当前目录为根目录 inum_cur = 0;
int dcount=0,fcount=0; short bcount=0; if(argc != 1) { printf(\ return ; } // 遍历i节点数组, 显示当前目录下的子目录和文件名 for(i = 0; i < INODENUM; i++) if((inode_array[i].inum> 0) && (inode_array[i].iparent == inum_cur)&& !strcmp(inode_array[i].user_name,user.user_name)) { if(inode_array[i].type == 'd') {
dcount++;
printf(\ } else {
fcount++; bcount+=inode_array[i].length; printf(\inode_array[i].file_name,inode_array[i].length); } } printf(\ %d file(s)d bytes\\n\ printf(\ %d dir(s) FreeSpace\\n\ }
// 功能: 在当前目录下创建子目录(mkdir dir1) void mkdir(void) { int i; if(argc != 2) { printf(\ return ; } // 遍历i节点数组, 查找未用的i节点 for(i = 0; i < INODENUM; i++) if(inode_array[i].inum < 0) break; if(i == INODENUM)
bytes\\n\d bytes }
{
printf(\ exit(-1); }
inode_array[i].inum = i;
strcpy(inode_array[i].file_name, argv[1]); inode_array[i].type = 'd';
strcpy(inode_array[i].user_name,user.user_name); inode_array[i].iparent = inum_cur; inode_array[i].length = 0; save_inode(i);
// 功能: 在当前目录下创建文件(creat file) void create(void) { int i; if(argc != 2) {
printf(\ return ; } for(i = 0; i < INODENUM; i++) {
if((inode_array[i].inum > 0) &&
(inode_array[i].type == 'f') && !strcmp(inode_array[i].file_name, argv[1])) { printf(\ return ; } } for(i = 0; i < INODENUM; i++)
if(inode_array[i].inum < 0) break; if(i == INODENUM) { printf(\ exit(-1); } inode_array[i].inum = i; strcpy(inode_array[i].file_name, argv[1]); inode_array[i].type = 'f'; strcpy(inode_array[i].user_name, user.user_name); inode_array[i].iparent = inum_cur; inode_array[i].length = 0;
save_inode(i); }
// 功能: 打开当前目录下的文件(open file1) void open() { int i, inum, mode, filenum; if(argc != 2) { printf(\ return ; } for(i = 0; i < INODENUM; i++) if((inode_array[i].inum > 0) &&
(inode_array[i].type == 'f') && !strcmp(inode_array[i].file_name,argv[1])&& !strcmp(inode_array[i].user_name,user.user_name)) break; if(i == INODENUM) { printf(\ return ; } inum = i; printf(\ scanf(\ getchar(); if((mode < 1) || (mode > 3)) { printf(\ return; } for(i = 0; i < FILENUM; i++)
if(file_array[i].inum < 0) break; if(i == FILENUM) {
printf(\ return ; } filenum = i; file_array[filenum].inum = inum;
strcpy(file_array[filenum].file_name, inode_array[inum].file_name); file_array[filenum].mode = mode; printf(\ if(mode == 1) printf(\
else if(mode == 2) printf(\ else printf(\}
// 功能: 从文件中读出字符(read file1) void read() { int i, inum; if(argc != 2) { printf(\ return; } for(i = 0; i < FILENUM; i++)
if((file_array[i].inum > 0) &&
!strcmp(file_array[i].file_name,argv[1])) break; if(i == FILENUM) { printf(\ return ; } else if(file_array[i].mode == 2) { printf(\ return ; } inum = file_array[i].inum; printf(\ if(inode_array[inum].length > 0) { read_blk(inum); for(i = 0; (i < inode_array[inum].length) && (temp[i] != '\\0'); i++) printf(\ } }
// 功能: 向文件中写入字符(write file1) void write() { int i, inum, length; if(argc != 2) { printf(\ return ; }
for(i = 0; i < FILENUM; i++) if((file_array[i].inum>0)&&
!strcmp(file_array[i].file_name,argv[1])) break; if(i == FILENUM) { printf(\ return ; } else if(file_array[i].mode == 1) { printf(\ return ; } inum = file_array[i].inum; printf(\ if(inode_array[inum].length == 0) { i=0;
inode_array[inum].address[0] = get_blknum(); printf(\ while(i<1023&&(temp[i]=getchar())!=EOF) i++; temp[i]='\\0'; length=strlen(temp)+1;
inode_array[inum].length=length; if(length > 512)
inode_array[inum].address[1] = get_blknum(); save_inode(inum); write_blk(inum); } else printf(\}
// 功能: 关闭已经打开的文件(close file1) void close(void) { int i; if(argc != 2) { printf(\ return ; } for(i = 0; i < FILENUM; i++) if((file_array[i].inum > 0) &&
正在阅读:
操作系统实验文件管理C++代码09-14
什么是三伏天(最新5篇)03-26
苏教版四语读写大赛填空集锦与答案02-01
唐山人工植物群落配置模式08-14
硝酸酯类药物的耐药及对策07-28
网页制作复习题(含答案)12-09
血凝仪SOP文件CA150010-24
福建省漳州市2019届高三第一次教学质量检查测试数学(文)试题03-11
三年级下册语文教学计划(鲁教版)07-27
对妈妈说心里话作文350字07-05
- 二甲基甲酰胺安全技术说明书
- 南邮计算机网络复习题
- 高分子物理实验指导书 - 图文
- 2009.9.25 莞惠环控专业施工图设计技术要求
- 学生工作简报
- 揭阳市斯瑞尔环境科技有限公司废酸综合利用项目可行性研究报告-广州中撰咨询
- 今日靓汤(佘自强)
- 奥数 - 二年级 - 数学 - 第三讲时间的教师版计算答案 - 图文
- 如何命制一份好的物理试卷
- 数据库开题报告
- 禁用未经批准或已经废止或淘汰技术的制度流程
- 大学英语(二)第2阶段测试题
- 湘教版一年级上册美术教案(全)
- (整套)学生顶岗(毕业)实习手册
- 高频 二极管包络检波 - 图文
- 2018届中考英语复习题型四任务型完形填空备考精编含解析 - 186
- 郑煤集团超化煤矿一采区开采设计 - 图文
- 财政学习题
- 摄影摄像复习资料
- SMC D-A93接线方式 - 图文
- C++
- 操作系统
- 实验
- 代码
- 文件
- 管理
- 化学必修2全册课时练及导学案 - 图文
- 动脉粥样硬化试题答案
- 大工15春《模拟电子线路实验》实验报告
- 生理学 第十一章内分泌练习题及答案
- 2018-2019年初中体育教师招聘理论试卷及答案
- 中外教育管理史-填空题(有答案)
- 四中 分层递进教学法在初中数学教学中的实践与探索
- 2018届广东省汕头市潮南区高三5月高考模拟理科数学试题及答案 精品
- 主持人台词
- 2011在职硕士英语试题及答案
- 毛概七 - 十五章 选择 填空
- 海信电视促销方案
- 2016年初一下册第一次月考语文试卷
- 东师中国文化概论16秋在线作业2
- 1FC6发电机常见故障的判断及处理方法
- 课题“ 凸透镜成像规律” 的教学策略
- 特殊采购类40、70、80对比
- Cjlywis建筑经济与企业管理全国2007年10月高等教育自学考试(附答案)文库
- 浅谈应用膨胀加强带进行无缝施工
- 餐厅点餐系统需求分析说明书