操作系统课程设计实验报告(21100字)

来源:m.fanwen118.com时间:2021.9.12

操作系统课程设计实验报告

学 部:

专业班级:

姓 名:

学 号:

指导教师:

摘要

目录

1、概论

2、系统设计

3、系统实现

4、系统测试

5、结论 参考文献 附件

摘要

操作系统是计算机学科的核心课程,对于计算机科学与技术专业

的学生尤为重要。此次课程设计旨在加强我们对操作系统中文件系统的理解。结合过去所学知识,为此设计了一个简单的Linux下的运行的文件管理系统。

1、概论

文件系统是硬盘上文件存储和读取的系统架构。操作系统必须在硬盘上建立文件系统,才能进行文件和文件夹的读取和存盘。在Linux中常见的文件系统有ext2、ext3、ext4和swap等。其中swap用于虚拟存盘,而其他文件系统用于一般的挂载目录。

文件系统是系统对文件和目录的一种定位方式,从而能让系统快速的找到该文件。对于使用者而言,文件系统并没有意义,只需将文件分类放置于不同的文件夹中即可。

2、系统设计

设计内容:

编写程序模拟实现一个简单的文件管理系统,设计一个较实用的用户界面,方便用户使用。

设计要求:

提供以下相关文件操作:

(1)login:登录

(2)register:注册

(3)open:打开文件

(4)read:读取文件数据到屏幕

(5)write:写文件,分为cover和append两种类型;cover是

覆盖原数据,append是在不改变原始数据的基础上进行增加。

(6)close:关闭文件

(7)create:新增文件

(8)delete:删除文件

(9)exit:退出程序

(10)dir:列文件目录

(11)help:帮助

3、系统实现

注册登录模块实现:

操作系统课程设计实验报告

帮助模块实现:

操作系统课程设计实验报告

列文件目录,新增文件模块实现:

操作系统课程设计实验报告

打开、读、写文件模块实现:

操作系统课程设计实验报告

关闭文件模块实现:

操作系统课程设计实验报告

删除、退出文件模块实现:

操作系统课程设计实验报告

4、系统测试

(1)实验环境

操作系统Ubuntu 15.10

编译器: gcc

语言:C语言

(2)测试结果

编译通过,但有警告,运行成功。

5、小结

通过这一次计算机操作系统的上机实验,使我对不同环境下的操作系统有了进一步的了解,使我学到了很多关于Linux的操作和相关知识。在程序编译过程中遇到了不少的问题,通过查阅书籍、网上浏览、质询老师同学并最终解决问题,这个过程是痛苦的,但问题解决之后又会获得无限的快乐。并且在解决问题的过程中收获了许多从前不曾了解的知识,从而也知道了自己的弱点所在。因此在以后的学习中需要更加努力。

参考文献

《计算机操作系统(第2版)》庞丽萍 阳富民 编著

《计算机操作系统实验指导(Linux版)》郑然 庞丽萍 编著 《精通Linux C编程》程国钢 编著

《Ubuntu Linux 从入门到精通》丰士昌 编著

附件

源程序

#include<string.h>

#include<stdio.h>

#include<stdlib.h>

#include<stdbool.h>

#define MAX_BLOCKS_NUM 256

#define MAX_BLOCK_SIZE 1025

#define MAX_DATANODE_NUM 2

#define MAX_INODE_NUM 512

#define MAX_CACHE_NUM 32

typedef struct user{

char account[15]; char password[15]; }user; int num; int begin; int end; }datanode; char filename[30]; int num; char code[30]; int size; datanode fat[MAX_DATANODE_NUM]; int node_num;}inode; inode ind; struct dirEntry *next;}dirEntry; char content[MAX_BLOCK_SIZE]; int num; bool isRevised; int offset; }block; typedef struct datanode { typedef struct inode{ typedef struct dirEntry{ typedef struct block {

int islogin = 0;

char blockspath[30] = "userdata/blocksDISK.disk"; char userspath[30] = "userdata/users.us"; static user currUser;

static dirEntry *DIR;

static int curr_inode_num = 0; static block *cache;

int max_node = 0;

static int FBT[MAX_BLOCKS_NUM];

static char *dirpath;

static char fbtpath[30] = "userdata/FBT.disk"; static dirEntry* selectEntry;

static dirEntry* currEntry;

static char cm_help[10] = "help";

static char cm_lg[10] = "login";

static char cm_rg[10] = "register";

static char cm_dir[10] = "dir";

static char cm_create[10] = "create";

static char cm_delete[10] = "delete";

static char cm_open[10] = "open";

static char cm_read[10] = "read";

static char cm_write[10] = "write";

static char cm_close[10] = "close";

static char cm_exit[10] = "exit";

static char cm_cancle[10] = "cancle";

void createStyle(int,char);

void createWrap(int);

int createSystem();

int diskUpdate(block);

void start();

void getUser();

int login();

int regist();

char lgOrRg();

void createBlocksDisk();

FILE* createDir();

void initDir(char *);

int getAction();

void initFBT();

int getCode();

int getFreeBlock(bool);

void saveDir();

void saveBlock(block bk);

void saveFBT();

int createHelp(char *filename);

dirEntry* delHelp(char *filename); void createDataDir();

int LgRg(); void help();

void dir();

void create();

void del();

void open();

void close();

void read();

void write();

void coverHelp();

void appendHelp();

int strcmpi(char *p1, char *p2){

if(strlen(p1)!=strlen(p2)) { return -1; } int i; for(i=0; i<strlen(p1); i++) { if(p1[i]!=p2[i]) {return -1;}} return 0;} char *datapath = "userdata"; printf("No dataDir !\nNow create it ...\n"); if(mkdir(datapath,0777)) while(1); } { printf("Can not create DataDir ...\nCrtl+C to exit.\n"); void createDataDir(){ printf("Succeed creating dataDir !\n");} printf("num: %d\n",ind.num); printf("filename: %s\n",ind.filename); printf("size: %d\n",ind.size);} while(num--) { printf("%c", style); }} while(n--) while(1) { char com[10]; printf("[login] or [register]: "); scanf("%s",com); if(!strcmpi(com,cm_lg)) { return 'l'; } if(!strcmp(com, cm_rg)) return 'r';}}} { { printf("\n");}} void showInode(inode ind){ void createStyle(int num, char style){ void createWrap(int n){ char lgOrRg(){

}void help(){ printf("欢迎您使用文件模拟系统 "); printf("以下是本系统支持的指令:\n"); printf("exit : 退出\n"); printf("help : 帮助\n"); printf("dir : 查看目录中的所有文件\n"); printf("create : 新建文件\n"); printf("delete : 删除文件\n"); printf("open : 打开文件\n"); printf("read : 读文件\n"); printf("write : 写文件\n"); printf("close : 关闭文件\n");} FILE* fp = fopen(blockspath, "w"); if(fp==NULL) { printf("Can not create Disk !\nCtrl+C to quit\n"); while(1); } int i, j; for(i=0; i<MAX_BLOCKS_NUM; i++) fputc('$',fp); { { } } for(j=0; j<MAX_BLOCK_SIZE; j++) void createBlocksDisk(){ else { fclose(fp); } FILE *p = fopen(fbtpath, "w"); if(p==NULL) { printf("FBT Created ERROR !\n"); while(1); } int i; for(i = 0; i<MAX_BLOCKS_NUM; i++) FBT[i] = 0; fprintf(p," %d",0); }} } { else { fclose(p); dirEntry* isInDir(char *filename) { int i; dirEntry *pt = DIR; while(pt!=NULL) { { } } if(!strcmpi(pt->ind.filename, filename)) return pt; pt = pt->next; return NULL;} dirEntry* res = DIR; if(res==NULL) { dirEntry* delHelp(char* filename){

printf("No files !\n");

return res; }

if(res->next==NULL) {

if(!strcmpi(res->ind.filename,filename)) { DIR = NULL;

currEntry=NULL;

printf("删除成功!\n");

return res; }

else {

return NULL; } }

if(!strcmpi(res->ind.filename,filename)) { DIR = res->next;

printf("删除成功!\n");

return res; }

while(res->next!=NULL) {

if(!strcmpi(res->next->ind.filename,filename)) dirEntry* r = res->next;

res->next = r->next;

printf("删除成功!\n");

return r; }

res = res->next; }

printf("删除失败!\n");

return NULL;}

void coverHelp(){

int f;

if(selectEntry->ind.size!=0){

for(f=0; f<selectEntry->ind.node_num; f++) FBT[selectEntry->ind.fat[f].num]==0; } char content[MAX_DATANODE_NUM][MAX_BLOCK_SIZE]; char tmp;

inode ind;

printf("End with '$'\n");

int i = 0;

while((tmp=getchar())!='$') {

if(i==0&&tmp=='\n') {

continue; }

content[i/MAX_BLOCK_SIZE][i++] = tmp; } ind.size = i;

if(i>(MAX_BLOCK_SIZE-1)*MAX_DATANODE_NUM) {

printf("文件过大,无法存储,创建失败 !\n"); return; }

int k;

for(k=0; k<=i/(MAX_BLOCK_SIZE-1);k++) {

block bk; int bkn; { { }

{

for(bkn=0; bkn<MAX_BLOCK_SIZE-1; bkn++)

bk.content[bkn]='$';

}

int len=0;

{ } }

}

bk.content[MAX_BLOCK_SIZE-1]='\0'; char *tmp;

int tp=0;

} {

{

if(k==0)

{

{

if(i<MAX_BLOCK_SIZE-1)

len = i;

if(k==1)

len=i%(MAX_BLOCK_SIZE-1)+1;

for(tp=0; tp<len; tp++) bk.isRevised = true; if(k==0) else

{

{

bk.content[tp] = content[k][tp];

bk.num = getFreeBlock(false); bk.num = getFreeBlock(true); if(bk.num==-1)

return;

}

{

}

printf("数据块已用完,内存不足!\n");

}

saveBlock(bk);

ind.fat[k].num = bk.num; ind.fat[k].begin = 0; ind.fat[k].end = len; }

ind.node_num = k;

strcpy(ind.code, selectEntry->ind.code);

strcpy(ind.filename, selectEntry->ind.filename); ind.num = selectEntry->ind.node_num; selectEntry->ind = ind; saveDir();

saveFBT();

printf("文件已保存 !\n");} char tmp[MAX_BLOCK_SIZE*2]; char ch;

printf("End with '$':\n"); int i = 0;

while((ch=getchar())!='$') {

if(i==0&&ch=='\n')

continue;

} }

tmp[i++] = ch;

{

void appendHelp()

tmp[i]='\0';

if((i+selectEntry->ind.size)>(MAX_BLOCK_SIZE-1)*MAX_DATANODE_NUM) {

printf("文件过大,无法存储,创建失败 !\n"); return; }

if(selectEntry->ind.size>MAX_BLOCK_SIZE-1)

{

else {

int offset = selectEntry->ind.size - MAX_BLOCK_SIZE + 1;

ET);

FILE* bfp = fopen(blockspath,"r+"); if(bfp==NULL)

return;

{

{ }

printf("DISK ERROR !\nFrom appendFile ...\n");

else

fseek(bfp,(selectEntry->ind.fat[1].num*(MAX_BLOCK_SIZE-1)+offset),SEEK_SET);

fwrite(tmp,sizeof(char),i,bfp); fclose(bfp);

selectEntry->ind.size = selectEntry->ind.size + i;

selectEntry->ind.fat[1].end = selectEntry->ind.fat[1].end + i; saveDir();

printf("文件保存成功 !\n");

}

}

{

else {

if(i<(MAX_BLOCK_SIZE-1-selectEntry->ind.size))

FILE* bfp = fopen(blockspath,"r+"); if(bfp==NULL)

return;

{

{ }

printf("DISK ERROR !\nFrom appendFile ...\n");

else

fseek(bfp,(selectEntry->ind.fat[0].num*(MAX_BLOCK_SIZE-1)+selectEntry->ind.size),SEEK_S

fwrite(tmp,sizeof(char),i,bfp); fclose(bfp);

selectEntry->ind.size = selectEntry->ind.size + i;

selectEntry->ind.fat[0].end = selectEntry->ind.fat[0].end + i; saveDir();

printf("文件保存成功 !\n");

}

}

else {

int bkNum = getFreeBlock(true); if(bkNum==-1)

return;

{ }

printf("数据块已用完,内存不足!\n");

char*p1=(char*)malloc((MAX_BLOCK_SIZE-1-selectEntry->ind.size)*sizeof(char));char*p2=(char*)malloc((i-(MAX_BLOCK_SIZE-1-selectEntry->ind.size))*sizeof(char));

int pi;

int pn1=0,pn2=0; for(pi=0; pi<i; pi++)

{

} }}

if(pi<MAX_BLOCK_SIZE-1-selectEntry->ind.size) {

p1[pn1++] = tmp[pi];

{

p2[pn2++] = tmp[pi]; else

p1[pn1] = '\0'; p2[pn2] = '\0';

FILE *bfp = fopen(blockspath, "r+");

if(bfp==NULL) return; { { } printf("DISK ERROR !\nFrom appendFile ...\n"); else fseek(bfp,((MAX_BLOCK_SIZE-1)*selectEntry->ind.fat[0].num+selectEntry->ind.fat[0].end),

fwrite(p1,sizeof(char),pn1,bfp); printf("line near 481\n"); fseek(bfp,((MAX_BLOCK_SIZE-1)*bkNum),SEEK_SET); fwrite(p2,sizeof(char),pn2,bfp); fclose(bfp); FBT[bkNum]=1; selectEntry->ind.node_num = 2; selectEntry->ind.size = selectEntry->ind.size + i; selectEntry->ind.fat[0].end = MAX_BLOCK_SIZE-2; selectEntry->ind.fat[1].num = bkNum; selectEntry->ind.fat[1].begin = 0; selectEntry->ind.fat[1].end = pn2; saveFBT(); saveDir(); printf("文件保存成功 !\n");}}}}} SEEK_SET); void create(){ int bkNum = getFreeBlock(false); if(bkNum==-1) { printf("数据块已用完,内存不足!\n"); return; } char tmp; dirEntry *pt = (dirEntry*)malloc(sizeof(dirEntry)); pt->next=NULL; while(1) { printf("filename: "); scanf("%s",pt->ind.filename); if(isInDir(pt->ind.filename)!=NULL) else { } } { } printf("文件名已存在 !\n请重新输入:\n"); break; while(1) { printf("Do you want to write the file ?[y/n]: "); scanf(" %c",&tmp); if((tmp=='y')||(tmp=='Y')||(tmp=='n')||(tmp=='N')) break; } } { pt->ind.num = curr_inode_num++; char code[10] = "wxx"; strcpy(pt->ind.code, code);

pt->ind.size = 0; pt->ind.node_num = 0; bool isNoBk = false; if(tmp=='y'||tmp=='Y') {

char content[MAX_DATANODE_NUM][MAX_BLOCK_SIZE]; char tmp;

printf("End with '$'\n");

int i = 0;

while((tmp=getchar())!='$') {

if(i==0&&tmp=='\n') {

continue; }

content[i/MAX_BLOCK_SIZE][i++] = tmp; } pt->ind.size = i;

if(i>(MAX_BLOCK_SIZE-1)*MAX_DATANODE_NUM) { printf("文件过大,无法存储,创建失败 !\n"); return; }

int k;

for(k=0; k<=i/(MAX_BLOCK_SIZE-1);k++) { block bk;

int bkn;

for(bkn=0; bkn<MAX_BLOCK_SIZE-1; bkn++) bk.content[bkn]='$'; } bk.content[MAX_BLOCK_SIZE-1]='\0';

char *tmp;

int tp=0;

int len=0;

if(k==0) {

if(i<MAX_BLOCK_SIZE-1) { len = i; } if(k==1) {

len=i%(MAX_BLOCK_SIZE-1)+1; } for(tp=0; tp<len; tp++) {

bk.content[tp] = content[k][tp]; bk.isRevised = true;

if(k==0) {

bk.num = bkNum; }

else {

bk.num = getFreeBlock(true);

if(bk.num==-1) {

printf("数据块已用完,内存不足!\n"); return; } saveBlock(bk);

pt->ind.fat[k].num = bk.num;

pt->ind.fat[k].begin = 0; { } } }

pt->ind.fat[k].end = len; }

pt->ind.node_num = k; }

if(currEntry==NULL) {

DIR = pt; }

else {

currEntry->next = pt; }

currEntry = pt;

saveDir();

saveFBT();

printf("Succeed create file [%s] !",pt->ind.filename);} void del(){

char tmp[30];

printf("请输入要删除的文件名: ");

scanf("%s",tmp);

if(isInDir(tmp)==NULL) {

printf("不存在这个文件。\n");

return; }

else {

dirEntry *dle = delHelp(tmp);

if(dle!=NULL) {

int i;

for(i=0; i<dle->ind.node_num;i++) { FBT[dle->ind.fat[i].num]=0;}}}

saveDir();

saveFBT();}

void open(){

char file[50];

printf("请输入文件名: ");

scanf("%s",file);

selectEntry = isInDir(file);

if(selectEntry==NULL) {

printf("没有这个文件 !\n"); }

else {

printf("文件[%s]已打开,输入close关闭.\n",file); int c = 0;

while(1) {

if(c==1) {

break; }

switch(getCode()) {

case 5: read(); case 6: write(); case 7: close(); break;

default: break; break; c=1;

printf("无效的指令\n");}}}}

void read(){

FILE* bfp = fopen(blockspath,"r"); if(bfp==NULL) {

printf("不存在磁盘文件 !\n"); while(1); } int i;

char tmp = ' ';

printf("文件[%s]中的内容如下:\n",selectEntry->ind.filename); if(selectEntry->ind.size==0)

{

tmp = fgetc(bfp); printf("%c",tmp);

}

}

}

printf("内容为空。\n");

{

{

else

}

{

else {

for(i=0; i<selectEntry->ind.node_num; i++)

int j;

fseek(bfp,(selectEntry->ind.fat[i].num*(MAX_BLOCK_SIZE-1)),SEEK_SET);

for(j=selectEntry->ind.fat[i].begin;j<selectEntry->ind.fat[i].end;j++)

printf("\n");

fclose(bfp); }}

void close(){

selectEntry==NULL; printf("文件已关闭 !\n");} char sel[10];

char cm_cover[10] = "cover"; char cm_append[10] = "append"; while(1) {

printf("请输入指令:\n[append]:在原文件基础上新增数据.\n[cover]:覆盖原数据printf("Command: "); scanf("%s",sel);

if(!strcmpi(sel,cm_cancle))

printf("取消 !\n"); break;

}

{ {

void write(){

\n[cancle]:取消\n");

if(!strcmpi(sel,cm_cover))

coverHelp(); break;

}

if(!strcmpi(sel,cm_append))

coverHelp();

{

{

{

}

if(selectEntry->ind.size==0) else

appendHelp(); } } break; printf("指令无效\n"); }} void initFBT(){ FILE* fp; fp = fopen(fbtpath, "r"); if(fp==NULL) { printf("Can not open FBT files.\n"); while(1); }

else {

int i=0;

while(!feof(fp)) {

fscanf(fp,"%d",&FBT[i++]); if(i==MAX_BLOCK_SIZE-1) break;}}}}

int getCode(){

char cmd[10];

printf("Command: ");

scanf("%s",cmd);

if(!strcmpi(cmd, cm_exit)) {

return -1; }

if(!strcmpi(cmd, cm_help)) {

return 0; }

if(!strcmpi(cmd, cm_dir)) {

return 1; }

if(!strcmpi(cmd, cm_create)) { return 2; }

if(!strcmpi(cmd, cm_delete)) { return 3; }

if(!strcmpi(cmd, cm_open)) {

return 4; }

if(!strcmpi(cmd, cm_read)) {

return 5; }

if(!strcmpi(cmd, cm_write)) {

return 6; }

if(!strcmpi(cmd, cm_close)) {

return 7; }

return 8;}

int getAction(){

switch(getCode()) {

case -1: {

return -1; case 0: help();

case 1: dir(); { } break; break;

case 2: case 3: case 4: default: create(); del(); open(); break; break; break; printf("无效的指令\n"); } return 0;} FILE *fp = fopen(dirpath, "w"); if(fp==NULL) { printf("Can not create Directory !\n"); while(1); } fclose(fp); FILE *f = fopen(dirpath, "r"); return f; }} FILE* createDir(char *dirpath){ else { char *getDirpath(char* username){ char *res; res = (char*)malloc(50*sizeof(char)); char t[10] = "userdata/"; char tail[5] = ".dir"; strcpy(res, t); strcat(res, username); strcat(res, tail); return res;} FILE *p ; p = fopen(dirpath, "r"); if(p==NULL) { p = createDir(dirpath); } dirEntry* pp = (dirEntry*)malloc(sizeof(dirEntry)); pp->next=NULL; DIR = NULL; int nm = 0; while(!feof(p)) if(nm!=0) { { void initDir(char *dirpath){ dirEntry* pt = (dirEntry*)malloc(sizeof(dirEntry)); pt->next=NULL; pp->next = pt; pp=pt; } { } { int r = fscanf(p,"%s",pp->ind.filename); if(r==EOF) break; fscanf(p,"%d",&(pp->ind.num)); if(max_node < pp->ind.num)

max_node = pp->ind.num; }

fscanf(p,"%s",pp->ind.code);

fscanf(p,"%d",&pp->ind.size);

if(pp->ind.size!=0) {

fscanf(p,"%d",&pp->ind.node_num);

int j;

int temp = 0;

for(j=0;j<pp->ind.node_num; j++) { fscanf(p,"%d",&pp->ind.fat[j].num); fscanf(p,"%d",&pp->ind.fat[j].begin); fscanf(p,"%d",&pp->ind.fat[j].end); curr_inode_num++;

if(curr_inode_num == MAX_INODE_NUM) { break; }

if(nm==0) {

DIR=pp;

nm = 1; }

currEntry = pp; }

fclose(p);}

void init() {

initDir(getDirpath(currUser.account));

printf("");

initFBT();

printf("");}

void start(){

printf("欢迎使用虚拟文件管理系统 \n");

FILE *ufp = fopen(userspath, "r");

if(ufp==NULL) {

printf("\n");

createDataDir();

FILE *fp = fopen(userspath,"w");

createBlocksDisk(); if(fp==NULL) {

printf("\n严重错误!\n");

while(1);

return; }

else {

fclose(fp); } }

else {

fclose(ufp); }

while(LgRg());

printf("已进入文件管理虚拟系统\n");

dirpath = getDirpath(currUser.account);

init(); } }

printf("输入help查看命令帮助,输入exit/quit退出系统\n"); while(getAction()!=-1);} while(1) { printf("account(length<10): "); scanf("%s", currUser.account); if(strlen(currUser.account)<=10) break; { } } } else { void getUser(){ printf("账户名最长为10位.\n"); while(1) { printf("password(length<10): "); scanf("%s", currUser.password); if(strlen(currUser.password)<=10) break; { } else { printf("账户名最长为10位.\n");}}} int login(){ getUser(); FILE *ffp = fopen(userspath, "r"); if(ffp==NULL) { printf("FILE ERROR !"); exit(0); } user temp; while(!feof(ffp)) { fscanf(ffp,"%s",temp.account); fscanf(ffp,"%s",temp.password); if((!strcmpi(temp.account, { } } fclose(ffp); return 0; }} currUser.account))&&(!strcmpi(temp.password, else { currUser.password))) fclose(ffp); return -1; int regist(){ getUser(); FILE *fp = fopen(userspath, "a"); if(fp==NULL) { printf("FILE ERROR !"); return -1; } else { fprintf(fp,"%s ",currUser.account); fprintf(fp," %s\n",currUser.password); fclose(fp);

return 0; }} int LgRg(){ char com[10]; char type = lgOrRg(); if(type=='l') { if(login()) return -1; { }} { } { } printf("登录失败 !\n"); else printf("登录成功 !\n"); return 0; else { if(regist()) return -1; { }}} printf("注册失败 !\n"); else printf("注册成功 !\n"); return 0; void dir(){ printf("文件名\t物理地址\t保护码\t\t文件长度\n"); int i=0; dirEntry *pt = DIR; while(pt!=NULL) { printf("%s\t%d\t\t%s\t\t%d\n",pt->ind.filename,i++,pt->ind.code,pt->ind.size); pt=pt->next; }} void saveDir(){ //printf("dirpath = %s\n",dirpath); FILE *fp = fopen(getDirpath(currUser.account), "w"); if(fp==NULL) { printf("updateDirDisk ERROR !\n"); while(1); } int j; dirEntry *p = DIR; while(p!=NULL) { fprintf(fp," %s",p->ind.filename); fprintf(fp," %d",p->ind.num); fprintf(fp," %s",p->ind.code); fprintf(fp," %d",p->ind.size); if(p->ind.size!=0) { { fprintf(fp," %d",p->ind.node_num); for(j=0; j<p->ind.node_num; j++) fprintf(fp," %d",p->ind.fat[j].num); fprintf(fp," %d",p->ind.fat[j].begin); else {

}

fprintf(fp," %d",p->ind.fat[j].end); } } p=p->next; fclose(fp); }} void saveBlock(block bk){ FILE *fp = fopen(blockspath, "r+"); if(fp==NULL) { printf("SaveBlock ERROR !\n"); } long offset = bk.num * (MAX_BLOCK_SIZE-1); fseek(fp,offset,SEEK_SET); fwrite(bk.content,sizeof(char),strlen(bk.content),fp); fclose(fp); FBT[bk.num] = 1; }} else { void saveFBT(){ FILE* fp = fopen(fbtpath, "w"); if(fp==NULL) { printf("SaveFBT ERROR !\n"); while(1); } int i; for(i =0; i<MAX_BLOCKS_NUM; i++) fprintf(fp," %d",FBT[i]); fclose(fp); }} { } else { int getFreeBlock(bool isAdd) { int pos = -1; int num = 0; int k; for(k=0; k<MAX_BLOCKS_NUM; k++) { if(FBT[k]==0) { } { } { if(isAdd == true) return k; { pos = k; num++; if(num==0) else return pos;}}}} return -1;} start(); } void main(){

更多类似范文
┣ 操作系统课程设计报告 11200字
┣ 计算机操作系统课程设计报告 22600字
┣ 操作系统课程设计报告 6700字
┣ 操作系统课程设计报告 3500字
┣ 更多操作系统课程设计实验报告
┗ 搜索类似范文