当前位置:文档之家› 二级文件管理课程设计

二级文件管理课程设计

二级文件管理课程设计
二级文件管理课程设计

操作系统二级文件管理课程设计

课程设计名称:二级文件管理系统

专业班级:

学生姓名:

学号

指导老师:

一、设计目的

通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。

二、设计内容

为linux系统设计一个简单的二级文件系统。要求做到以下几点:

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

login 用户登陆

dir 列文件目录

create 创建文件

delete 删除文件

open 打开文件

close 关闭文件

read 读文件

write 写文件

rename 重命名

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

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

三、程序设计

1、在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。

2、文件物理结构可采用显式链接或其他方法。

3、磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。

4、文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。

5、设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:用户登录、创建目录、删除目录、创建文件、删除文件、读文件、写文件、重命名、退出。

四、源代码

1、FileSystem.h

#define DIR_LENGTH 1024 //路径最长可达100字节

#define MAX_WRITE 1024*128 //写入文字可达128k字节

#define MEM_D_SIZE 1024*1024 //1M磁盘空间

#define DISKSIZE 1024 //磁盘块的大小 1K

#define MSD 5 //最大子目录数 5

#define DISK_NUM MEM_D_SIZE/DISKSIZE //磁盘块数目 1024=1M/1K

#define FATSIZE DISK_NUM*sizeof(struct FatItem) //FAT表大小1024*8=8K

#define MOFN 5 //最大文件打开数 5

#define ROOT_DISK_NO FATSIZE/DISKSIZE+1 //根目录起始盘块号 9

#define ROOT_DISK_SIZE sizeof(struct Direct) //根目录大小 196

#define LOGIN 15

#define NAME_LONG 1

#define NOT_EXSIT -1

#define NOT_OPEN -1

#define DIR_FULL -2

#define OPEN_FULL -3

#define ALREADY -4

#define NOT_R_W -4

#define DISK_FULL -5

#define NOT_EXIT -1

struct FatItem // size 8

{ int item; //存放文件下一个磁盘的指针char em_disk; //磁盘块是否空闲标志位, 0 空闲};

struct Direct

{ struct FCB

{ char name[8]; //文件/目录名 8位

char property; //属性 1位目录 0位普通文件

int size; //文件/目录字节数、盘块数)

int firstDisk; //文件/目录起始盘块号

int next; //子目录起始盘块号

int sign; //1是根目录 0不是根目录}directItem[MSD+2]; //最大子目录 5

};

struct OpenTable

{ struct OpenTableItem

{ char name[9]; //文件名

int firstdisk; //起始盘块号

int size; //文件的大小

char open_flag; //文件打开标志:'1':打开。'0':未打开}openitem[MOFN]; //最大文件打开数 5

int cur_size; //当前打文件的数目};

struct FatItem *fat; //FAT表

struct Direct *root; //根目录

struct Direct *cur_dir; //当前目录

struct OpenTable user_openTable; //文件打开表

int fd=-1; //文件打开表的序号

char *bufferdir; //记录当前路径的名称

char *fdisk; //虚拟磁盘起始地址

int cur_user;

int find_N = 0;

void init();

void format();

void enter();

void assign();

int create(char *name);

int open(char *name);

int close(char *name);

int rename();

int write(int fd,char *buf,int len,char *name);

int read(int fd,char *buf,char *name);

int del(char *name);

void dir();

int login();

void helpMenu();

void currentPath();

2、FileSystem.cpp

#include

#include

#include"conio.h"

#include "FileSystem.h"

#include

int statue=0;

char user[20]="li";

char password[20]="123";

int main()

{ FILE *fp;

char ch;

char cmd[13];

char name[10];

int i,flag;

char *contect;

helpMenu();

while((flag=login())!=LOGIN)

{ printf("密码不正确!\n");

printf("请输入正确的用户名和密码!\n");

}

contect = (char *)malloc(MAX_WRITE*sizeof(char));

if((fp=fopen("disk.bat","rb"))==NULL) //创建一个文件{

printf(" Will you initialize the disk? (y or n)");

scanf("%s",&ch);

if(ch=='y')

{ init();

printf(" Initialize Succeed! \n");}

else

{return 0;}

}

enter();

//分析命令

while(1)

{ printf("%s/>",bufferdir);

scanf("%s",cmd);

if(strcmp(cmd,"help") == 0 || strcmp(cmd,"?") == 0)

{ helpMenu();}

else if(strcmp(cmd,"model") == 0)

{ printf("需要修改密码么(y/n)");

scanf("%s",&ch);

if (ch=='y')

{ printf("请输入密码\b");

scanf("%s",&password);

printf("修改成功");}

else

{printf("退出修改密码\n"); }

}

else if(strcmp(cmd,"login") == 0)

{ while (login()!=LOGIN)

{ printf("请输入正确的用户名或密码\n");}

}

else if(strcmp(cmd,"quit") == 0)

{ free(contect);

exit(1);

return 0;

}

else if(strcmp(cmd,"create") == 0)

{ scanf("%s",name);

flag = create(name);

//关于创建文件共实现四个判断

if(flag==NAME_LONG)

{//文件名太长

printf("Error: \n 文件的名称太长 !\n");}

else if(flag==DIR_FULL)

{//目录下文件数超

printf("Error: \n 该目录下的文件和目录数已满 !\n");} else if(flag==ALREADY)

{//重名

printf("Error: \n 该目录下已存在该文件 !\n");} else if(flag==DISK_FULL)

{//磁盘空间满

printf("Error: \n 磁盘空间已满!\n");}

else

{ printf(" 成功创建文件! \n"); }

}

else if(strcmp(cmd,"open") ==0)

{ statue=1;

scanf("%s",name);

fd = open(name);

if(fd == NOT_EXSIT)

{ printf("Error: \n 所要打开的文件不存在! \n");}

else

{printf("打开成功! \n");}

}

else if(strcmp(cmd,"write") == 0)

{ statue=2;

scanf("%s",name);

if(fd == NOT_OPEN)

{

printf("Error:\n 该文件没有打开,请打开后再写入 \n");

}

else

{

printf("请输入文件的内容: ");

scanf("%s",contect); //connect为一个长度

为128字节的变量值

flag=write(fd,contect,strlen(contect),name);

if(flag == 0) //每个盘块可写入最多128字节

{

printf("已成功写入! \n");

}

else

{

printf("Error:\n 硬盘空间不足,无法写入!

\n");

}

}

}

else if(strcmp(cmd,"read") == 0)

{

statue=3;

scanf("%s",name);

fd = open(name);

if(fd == NOT_EXSIT)

{

printf("Error:\n 不存在该文件,不能读! \n");

}

else if (fd == NOT_OPEN)

{

printf(" 该文件已经打开! \n");

}

else

{

flag = read(fd,contect,name);

if(flag == 0)

{

for(i=0;i

{

printf("%c",contect[i]);

}

printf("\t\n");

// if(gets(a)==NULL);

}

}

}

else if(strcmp(cmd,"delete") == 0)

{

scanf("%s",name);

flag = del(name);

if(flag == NOT_EXIT)

{

printf("Error:\n 该文件没有退出,不能删除! \n");

}

else if(flag == -NOT_OPEN)

{

printf("Error:\n 该文件是打开的,请先关闭它,然后再删除! \n");

}

else

{

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

}

}

else if(strcmp(cmd,"dir") ==0)

{

dir();

}

else if(strcmp(cmd,"format") == 0)

{

format();

puts("format success!");

}

else if(strcmp(cmd,"close") == 0)

{

statue=0;

int i;

for(i=0;i

{

if(!strcmp(user_openTable.openitem[i].name, name))

break;

}

if(i>=MOFN)

printf("Error:\n 该文件没有打开,无需关闭!\n");

else

{

//清空该文件的用户打开表项

strcpy(user_openTable.openitem[i].name,"");

user_openTable.openitem[i].firstdisk = -1;

user_openTable.openitem[i].size = 0;

user_openTable.openitem[i].open_flag = '0';

user_openTable.cur_size--;

printf("%s","close success!\n");

continue;

}

}

else if (strcmp(cmd,"rename") == 0)

{

if (statue>=1)

{

printf("打开文件不能重命名");

}

else{

printf("%d",statue);

flag=rename();

if (flag==NOT_EXIT)

{

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

}

}

}

else{

printf("\n 指令错误! \n");

}

}

}

int login()

{

char inuser[20];

char inpassword[20];

char ch;

int j=0;

printf("请输入用户名\n");

scanf("%s",inuser);

while((strcmp(inuser,user)!=0))

{

printf("该用户不存在!\n");

printf("***************\n");

printf("请输入正确的用户名:\n");

scanf("%s",inuser);

}

printf("请输入密码\n");

while((ch=getch())!=13) //将输入的密码转换成字符****

{

putchar('*');

inpassword[j]=ch;

j++;

}

inpassword[j]='\0'; //字符数组的最后一位为'\0',故要加该语句

//printf("您输入的密码是:%s",inpassword);

printf("\n");

getchar();

if ((strcmp(inuser,user)==0)&&(strcmp(inpassword,password)==0))

{

bufferdir="wang";

return LOGIN;

}

else

{

return 0;

}

}

void init()

{

fdisk = (char *)malloc(MEM_D_SIZE*sizeof(char)); //分配空间

format();

}

void format()

{

int i;

FILE *fp;

fat = (struct FatItem *)(fdisk+DISKSIZE); //FAT 1M

/*-----初始化FAT表 fat[1]---fat[7]------------*/

for(i=1;i

{

fat[i].item=i+1;

fat[i].em_disk='1';

}

for(i=ROOT_DISK_NO;i

fat[i].item = -1; //item为-1即表示还没有使用

fat[i].em_disk = '0';

}

root = (struct Direct *)(fdisk+DISKSIZE+FATSIZE); //根目录的地址 1k+8k root->directItem[0].sign = 1; //根目录

root->directItem[0].firstDisk = ROOT_DISK_NO ; // = 9; //第9个盘块开始

strcpy(root->directItem[0].name,"."); //定义其文件名为 '.' root->directItem[0].next = root->directItem[0].firstDisk; //子目录的起始盘块是根目录所在第一个盘块,即未出

//第一块

root->directItem[0].property = '1'; //1根目录

root->directItem[0].size = ROOT_DISK_SIZE; //即一个根目录项的空间大小 196字节

/*指向上一级目录的目录项-----回指指针*/

root->directItem[1].sign = 1;

root->directItem[1].firstDisk = ROOT_DISK_NO;

strcpy(root->directItem[1].name,"..");

root->directItem[1].next = root->directItem[0].firstDisk;

root->directItem[1].property = '1';

root->directItem[1].size = ROOT_DISK_SIZE;

for(i=2;i

{ //子目录最大只有5个表项

root->directItem[i].sign = 0;

root->directItem[i].firstDisk = -1;

strcpy(root->directItem[i].name,"");

root->directItem[i].next = -1;

root->directItem[i].property = '0';

root->directItem[i].size = 0;

}

if((fp = fopen("disk.bat","wb"))==NULL)

{

printf("Error:\n Can't Open The File \n");

return;

}

//虚拟到物理

if(fwrite(fdisk,MEM_D_SIZE,1,fp)!=1)

{

printf("Error:\n 文件写入错误! \n");

}

fclose(fp);

}

void enter()

{

FILE *fp;

int i;

//重新回到初始空间---虚拟中操作

fdisk = (char *)malloc(MEM_D_SIZE*sizeof(char)); //申请 1M空间 //判断disk文件是否存在

if((fp=fopen("disk.bat","rb"))==NULL)

{

printf("Error:\n 打开文件出错!\n");

return;

}

if(!fread(fdisk,MEM_D_SIZE,1,fp)){ //把磁盘文件disk.dat 读入虚拟磁盘空间(内存)

//回到新申请的fdisk中

printf("Error:\n 不能读文件!\n");

exit(0);

}

fat = (struct FatItem *)(fdisk+DISKSIZE);

root = (struct Direct *)(fdisk+DISKSIZE+FATSIZE);

fclose(fp);

//最多能打开5个文件

for(i=0;i

{

strcpy(user_openTable.openitem[i].name,"");

user_openTable.openitem[i].firstdisk = -1;

user_openTable.openitem[i].size = 0;

}

user_openTable.cur_size = 0;

cur_dir = root;

bufferdir = (char *)malloc(DIR_LENGTH*sizeof(char));

strcpy(bufferdir,"Root:");

}

int create(char *name)

{

int i,j;

//文件名超过8字符

if(strlen(name)>8) //文件名大于 8位return(NAME_LONG);

//重名check

for(j=2;j

{

//如果同名则跳出

if(!strcmp(cur_dir->directItem[j].name,name) && cur_dir->directItem[j].property=='0')

break;

}

//如果没循环完,则是因为文件已存在

if(j

return(ALREADY);

//超过最大文件数目

for(i=2;i

{

if(cur_dir->directItem[i].firstDisk==-1) //找到没有用到的

break;

}

if(i>=MSD+2) //无空目录项

return(-2);

for(j=ROOT_DISK_NO+1;j

{

if(fat[j].em_disk=='0') //为所创建的文件分配盘块

break; //此文件的大小应该是不加分配大小的,而是默认占用一个盘块

} //确实如此

if(j>=DISK_NUM)

return(DISK_FULL);

fat[j].em_disk = '1'; //将空闲块置为已经分配

//填写目录项

strcpy(cur_dir->directItem[i].name,name);

cur_dir->directItem[i].firstDisk = j;

cur_dir->directItem[i].size = 0;

cur_dir->directItem[i].next = j;

cur_dir->directItem[i].property = '0';

return 0;

}

int open(char *name)

{

int i, j;

for(i=2;i

{

if(!strcmp(cur_dir->directItem[i].name,name))

break;

}

if(i>=MSD+2)

return(NOT_EXSIT);

//查找一个空闲用户打开表项

for(j=0;j

{

if(user_openTable.openitem[j].firstdisk==-1)

break;

}

//填写表项的相关信息

user_openTable.openitem[j].firstdisk = cur_dir->directItem[i].firstDisk; //cur_dir 最多5个

strcpy(user_openTable.openitem[j].name,name);

user_openTable.openitem[j].size = cur_dir->directItem[i].size;

user_openTable.openitem[j].open_flag = '1';

user_openTable.cur_size++;

//返回用户打开表表项的序号

return(j);

}

int close(char *name)

{

int i;

for(i=0;i

{

if(!strcmp(user_openTable.openitem[i].name, name))

break;

}

if(i>=MOFN)

return(6);

//清空该文件的用户打开表项

strcpy(user_openTable.openitem[i].name,""); user_openTable.openitem[i].firstdisk = -1;

user_openTable.openitem[i].size = 0;

user_openTable.openitem[i].open_flag = '0';

user_openTable.cur_size--;

return 0;

}

int write(int fd, char *buf, int len,char *name)

{

char *first;

int remain;

int item, i, j, k;

int ilen1, ilen2, modlen, temp;

//读取用户打开表对应表项第一个盘块号

item = user_openTable.openitem[fd].firstdisk;

//找到当前目录所对应表项的序号

for(i=2;i

{

if(cur_dir->directItem[i].firstDisk==item)

break;

}

temp = i; //存放当前目录项的下标

while(fat[item].item!=-1)

{

item = fat[item].item; /*-查找该文件的下一盘块--*/

}

//计算文件地址

first = fdisk+item*DISKSIZE+user_openTable.openitem[fd].size%DISKSIZE;

remain = DISKSIZE-user_openTable.openitem[fd].size%DISKSIZE;

//如果最后磁盘块剩余的大小大于要写入的文件的大小

if(remain > len)

{

strcpy(first,buf);

user_openTable.openitem[fd].size = user_openTable.openitem[fd].size+len;

cur_dir->directItem[temp].size = cur_dir->directItem[temp].size+len;

}

else

{

for(i=0; i

{/*写一部分内容到最后一块磁盘块的剩余空间(字节)*/

first[i] = buf [i];

}

/*-----计算分配完最后一块磁盘的剩余空间(字节) 还剩下多少字节未存储-------*/

ilen1 = len - remain;

ilen2 = ilen1/DISKSIZE;

modlen = ilen1%DISKSIZE;

if(modlen>0)

ilen2 = ilen2+1; /*--还需要多少块磁盘块-*/

for(j=0;j

{

for(i=ROOT_DISK_NO+1;i

{

if(fat[i].em_disk=='0')

break;

}

if(i>=DISK_NUM) //如果磁盘块已经分配完了

return(DISK_FULL);

first = fdisk+i*DISKSIZE; /*--找到的那块空闲磁盘块的起始地址-*/

if(j==ilen2-1) /*--如果是最后要分配的一块-*/

{

for(k=0;k

first[k] = buf[k];

}

else/*-如果不是要最后分配的一块--*/

{

for(k=0;k

first[k] =buf[k+j*DISKSIZE+remain];

}

fat[item].item = i; //找到一块后将它的序号存放在上一块的指针中

fat[i].em_disk = '1'; //置找到的磁盘的空闲标志位为已分配-*/

fat[i].item = -1; //它的指针为 -1 (即没有下一块)-*/

}

//修改长度

user_openTable.openitem[fd].size = user_openTable.openitem[fd].size+len;

cur_dir->directItem[temp].size = cur_dir->directItem[temp].size+len;

printf("%d\n",cur_dir->directItem[temp].size );

}

return 0;

}

int read(int fd, char *buf,char *name)

{

int len = user_openTable.openitem[fd].size;

char *first;

int i, j, item;

int ilen1, modlen;

item = user_openTable.openitem[fd].firstdisk;

ilen1 = len/DISKSIZE;

modlen = len%DISKSIZE;

if(modlen!=0)

ilen1 = ilen1+1; /*--计算文件所占磁盘的块数-*/

for(i=0;i

{

first = fdisk+item*DISKSIZE; /*--计算文件的起始位置-*/

if(i==ilen1-1) /*--如果在最后一个磁盘块-*/

{

for(j=0;j

buf[i*DISKSIZE+j] = first[j];

}

else /*--不在最后一块磁盘块-*/

{

for(j=0;j

buf[i*DISKSIZE+j] = first[j];

item = fat[item].item; /*-查找下一盘块-*/

first = fdisk+item*DISKSIZE;

}

}

return 0;

}

int rename()

{

int i;

char strrename[8];

char strnewname[8];

printf("请输入要重命名的文件");

scanf("%s",&strrename);

// printf("%s",strrename);

for(i=2;i

{

if(!strcmp(cur_dir->directItem[i].name,strrename))

{

break;

}

}

if(i>=MSD+2)

return(NOT_EXSIT);

printf("请输入新的命名(最大文件名长度为8)");

scanf("%s",&strnewname);

// cur_dir->directItem[i].name=strnewname;

strcpy(cur_dir->directItem[i].name,strnewname);

return 0;

}

int del(char *name)

{

int i,cur_item,item,temp;

for(i=2;i

{

if(!strcmp(cur_dir->directItem[i].name,name) && cur_dir->directItem[i].property == '0')

cur_item = i;

// printf("--%d--",i);

break;

}

if(i>=MSD+2) //--如果不在当前目录中

return(NOT_EXIT);

for(i=0;i

{

if(!strcmp(user_openTable.openitem[i].name,name))

return -NOT_OPEN;

}

item = cur_dir->directItem[cur_item].firstDisk;/*--该文件的起始盘块号-*/ while(item!=-1) /*--释放空间,将FAT表对应项进行修改-*/

{

temp = fat[item].item;

fat[item].item = -1;

fat[item].em_disk ='0';

item = temp;

}

//释放目录项

cur_dir->directItem[cur_item].sign = 0;

cur_dir->directItem[cur_item].firstDisk = -1;

strcpy(cur_dir->directItem[cur_item].name,"");

cur_dir->directItem[cur_item].next = -1;

cur_dir->directItem[cur_item].property = '0';

cur_dir->directItem[cur_item].size = 0;

return 0;

}

void dir()

{

int i,count=0;

printf("\t文件名\t | \t文件大小\t\n");

for(i=2;i

{

if(cur_dir->directItem[i].firstDisk!=-1) /*-如果存在子目录-*/

{

count++;

if(cur_dir->directItem[i].property=='0') /*-文件-*/

{ printf("\t%s\t | \t %d\t \n",cur_dir->directItem[i].name,cur_dir->directItem[i].size);

}

else

{ printf("\t目录名:");

printf("%s\t",cur_dir->directItem[i].name);

}

}

}

if(count==0){ printf("不存在子目录\n"); }

}

void currentPath()

{printf("%s/>",bufferdir);}

void helpMenu()

{ printf("**********二级文件管理系统**********\n");

printf(" quit quit the file system \n");

printf(" create create a new file\n");

printf(" delete delete a file\n");

printf(" open open a file\n");

printf(" close close an openned file\n");

printf(" write write to a file\n");

printf(" read read an openned file\n");

printf(" rename rename an openned file\n");

printf(" dir showCurrent all files in current path \n");

操作系统课程设计-文件系统目录管理

操作系统课程设计-文件系统目录管理

目录 第一章课程设计目的和要求 (1) 1 课程设计目的 (1) 2 课程设计要求 (1) 2.1 课程设计思想原理 (1) 2.2 课程题目 (1) 2.3 提交课程设计报告 (2) 第二章课程设计内容 (3) 1 文件管理系统结构 (3) 2 文件系统采用索引文件结构 (3) 2.1 磁盘模拟 (3) 2.2文件的逻辑结构 (3) 2.3目录结构 (3) 2.4用户接口 (5) 第三章详细设计 (7) 1 程序功能模块图 (7) 2 实体关系图 (7) 3 数据流图 (8) 4 数据结构设计 (8) 5 程序流程图 (11) 5.1 建立文件目录(mkdir)程序流程图 (11) 5.2 删除文件目录(rmdir)程序流程图 (12) 第四章程序运行与测试 (13) 1 程序运行主界面 (13) 2 用mkdir [dirname] 命令创建子目录 (13) 3用ls命令显示当前目录下信息 (13) 4 用rmdir [dirname] 命令删除子目录 (14) 5 用cd [dirname] 命令改名当前目录 (14) 第五章课程设计总结 (16)

附录Ⅰ参考文献 (17) 附录Ⅱ程序清单 (18)

第一章课程设计目的和要求 1 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 2 课程设计要求 2.1 课程设计思想原理 阅读操作系统方面的书籍,了解操作系统的文件系统原理。结合分析课程设计要求,确定实体以及它们之间的关系。实体关系有三张表(磁盘空间分配表、文件表、打开文件表)、一个模拟磁盘的空间、命令服务和用户构成。用户负责输入命令。命令服务实现命令的解释、命令检查以及调用相关模块执行相应的命令功能。 磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志。如果占用标志为0,即该空间可分配给文件。初始化磁盘空间分配表链表,首先把整个模拟磁盘作来一块,并置占用位为0.当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果该块为可分配,则检查块大小,若块长度大于或等于申请空间大小,则把块的前一部分(等于申请大小)分配给文件,并置标志位为占用。剩下的大小作来一个新块,作来一个新节点插入到原节点的后边,标志位为可用。这样就实现了模拟磁盘的线性分配。 构造这些实体的关系图,数据流图、程序流程图来进行具体的设计。 2.2 课程题目 要求设计一个文件系统目录模拟程序,通过该程序能够实现简单的目录管理操作:

二级文件管理课程设计

操作系统二级文件管理课程设计 课程设计名称:二级文件管理系统 专业班级: 学生姓名: 学号 指导老师: 一、设计目的

二、设计内容 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条); login 用户登陆 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 rename 重命名 (2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。 三、程序设计 1、在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。 2、文件物理结构可采用显式链接或其他方法。 3、磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。 4、文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。 5、设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:用户登录、创建目录、删除目录、创建文件、删除文件、读文件、写文件、重命名、退出。 四、源代码 1、FileSystem.h #define DIR_LENGTH 1024 //路径最长可达100字节 #define MAX_WRITE 1024*128 //写入文字可达128k字节 #define MEM_D_SIZE 1024*1024 //1M磁盘空间 #define DISKSIZE 1024 //磁盘块的大小 1K #define MSD 5 //最大子目录数 5 #define DISK_NUM MEM_D_SIZE/DISKSIZE //磁盘块数目 1024=1M/1K #define FATSIZE DISK_NUM*sizeof(struct FatItem) //FAT表大小1024*8=8K #define MOFN 5 //最大文件打开数 5 #define ROOT_DISK_NO FATSIZE/DISKSIZE+1 //根目录起始盘块号 9 #define ROOT_DISK_SIZE sizeof(struct Direct) //根目录大小 196 #define LOGIN 15 #define NAME_LONG 1 #define NOT_EXSIT -1

文件系统课程设计报告

设计时间: 2011-1-5至2011-1-7 专业年级:08计科4班: 一.设计目的: 通过操作系统其中一个子系统的设计和实现,掌握Linux文件系统的基本原理、结构和实现方法,掌握Linux文件系统中文件的建立、打开、读/写、执行、属性等系统调用的使用,学会设计简单的文件系统并实现一组操作,以及学习文件系统的系统调用命令,提高对文件系统实现功能的理解和掌握。同时,掌握操作系统设计的方法与技巧,增强系统软件设计的实际工作能力。 二.设计容: 为LINUX 设计一个简单的二级文件系统。本文件系统采用类似DOS系统的文件管理方式,每次调用该文件系统时,首先申请一定的存空间,然后对该存空间进行分配。将申请到的空间划分为目录区,文件区;采用位示图进行空间管理,盘块的分配使用显示(FAT 表)的方式。每次调用该文件系统时自动为其分配空间,并将上次操作的结果从硬盘上调入存;当结束调用时则将操作的结果重新存入硬盘,以便下次调用。(每次使用都会自动搜索文件系统,以此确定是否是第一次使用;若是则格式化生成文件系统,否则读取已存在的文件系统。) 三.设计过程 1、实现功能 该系统具备下列功能: login 用户登录logout 注销 mkdir/md 创建目录rmdir/rd 删除目录 cd/cd .. 修改目录creat 创建文件 open 打开文件dir 显示当前目录和文件 write 读文件 delete 删除文件 close 关闭文件 2、添加功能 (1)制作了一个“操作命令符”列表框,说明接下来如何操作,这样有利于更好地阅读、操作和运行程序,使不懂得程序代码的人也可以运行该程序,更好地理解该程序实现的功能。 (2)在命令解释层函数cmdexp()里加了一些选择和操作功能,增加程序实现的功能,如原来程序只有显示当前目录和文件、创建目录和修改目录的功能,把它拓展到系统所要求的全部功能,并在原有的程序的基础上进行相应的修改,使程序更加完善。 3、设计思路 (1)要将文件存储在磁盘上,必须为之分配相应的存储空间,并对文件存储空间进行管

操作系统课程设计文件系统管理)

操作系统课程设计Array文件系统管理 学院计算机学院 专业计算机科学与技术 班级 姓名 学号 2013年1月8日 广东工业大学计算机学院制 文件系统管理 一、实验目的 模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法看,加深了解文件系统的内部功能的实现。通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了解。 二、实验内容和要求 编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。在用户程序中通过使用文件系统提供的create,open,read,write,close,delete等文件命令,对文件进行操作。 以下报告主要包括: 1.可行性分析 2.需求分析 3.概要设计

4.详细设计 5.测试 6.总结 三、可行性分析 1、技术可行性 对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。利用大二期间学习的数据结构可以模拟出此课程设计的要求。 2、经济可行性 课程设计作为本课程的练习及进一步加深理解。与经济无关,可以不考虑。(零花费,零收益) 3.法律可行性 自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。 四、需求分析 编写程序实现文件系统,主要有以下几点要求: 1、实现无穷级目录管理及文件管理基本操作 2、实现共享“别名” 3、加快了文件检索 五、概要设计 为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录UFD(User File Directory)。这些文件目录可以具有相似的结构,它由用户所有文件的文件控制块组成。此外,在系统中再建立一个主文件目录MFD (Master File Directory);在主文件目录中,每个用户目录文件都占有一个目

机械设计课程设计-二级斜齿圆柱齿轮减速器

/ 机械设计课程设计原始资料一、设计题目 热处理车间零件输送设备的传动装备 二、运动简图 … @ 图1

1—电动机 2—V带 3—齿轮减速器 4—联轴器 5—滚筒 6—输送带 三、工作条件 该装置单向传送,载荷平稳,空载起动,两班制工作,使用期限5年(每年按300天计算),输送带的速度容许误差为±5%. ) 四、原始数据 滚筒直径D(mm):320 运输带速度V(m/s): 滚筒轴转矩T(N·m):900 五、设计工作量 1减速器总装配图一张 > 2齿轮、轴零件图各一张 3设计说明书一份 六、设计说明书内容 1. 运动简图和原始数据 2. 电动机选择 3. 主要参数计算 4. V带传动的设计计算 5. 减速器斜齿圆柱齿轮传动的设计计算 ,

6. 机座结构尺寸计算 7. 轴的设计计算 8. 键、联轴器等的选择和校核 9. 滚动轴承及密封的选择和校核 10. 润滑材料及齿轮、轴承的润滑方法 11. 齿轮、轴承配合的选择 12. 参考文献 七、设计要求 " 1. 各设计阶段完成后,需经指导老师审阅同意后方能进行下阶段的设计; 2. 在指定的教室内进行设计. 一. 电动机的选择 一、电动机输入功率w P 60600.752 44.785/min 22 3.140.32w v n r Rn π??= ==?? 90044.785 4.21995509550 w w Tn P kw ?=== 【 二、电动机输出功率d P 其中总效率为 32 320.960.990.970.990.960.833v ηηηηηη=????=????=带轴承齿轮联轴滚筒 4.219 5.0830.833 w d P P kw η = = = 查表可得Y132S-4符合要求,故选用它。 Y132S-4(同步转速1440min r ,4极)的相关参数 表1

实验 文件管理(二)

实验六:文件系统 一、目的要求 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2、要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二、例题: ①设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 ②程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 ③为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 ④算法与框图: a、因系统小,文件目录的检索使用了简单的线性搜索。 b、文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。 c、程序中使用的主要设计结构如下: Ⅰ、主文件目录和用户文件目录(MFD、UFD) Ⅱ、打开文件目录(AFD)(即运行文件目录)

三、调度算法的流程图 四、文件管理源程序 #include #include #include #include typedefstructufd { char filename[10];/*文件名*/ char procode[8];/*属性*/

int length;/*文件长度*/ structufd *nextfile;/*指向下一个文件*/ }UFD; typedefstructmfd { char username[10];/*用户名*/ structufd *link;/*指向该用户的第一个文件*/ }MFD; typedefstructprotected_flag { char code[4]; }PRO; typedefstructafd/*运行文件目录*/ { char filename[10];/*打开文件名*/ charprocode[4]; intrwpointer;/*读写指针*/ }AFD; PRO flag[3]={"100",/*只读*/ "110",/*读写*/ "001"/*可执行*/ }; UFD *rw_pointer;/*读写指针*/ AFD *afd=NULL; MFD filesystem[10]; intnum;/*当前用户个数*/ voiddisplayallfile() { inti; UFD *p; for(i=0;ifilename); printf("文件属性: %s\t||",p->procode); printf("文件长度: %d\n\n",p->length); p=p->nextfile; } }

文件管理系统课程设计

课程名称:操作系统 实验题目:文件管理系统 1、课程设计选题 (3) 1.1主要设计内容 3 1.2主要设计思路 3 2、课程设计需求分析 3 3、概要设计 (4) 3.1整体设计框架 4 3.2各模块的基本功能 4 4、系统实现 5 4.1原理 6 4.2各模块算法思想 6 4.3流程图描述 9 4.4代码描述 10 5、系统测试 11

5.1系统主界面 11 5.2子系统功能测试 11 6、总结 19 7、参考文献样式 19 1、课程设计选题 1.1主要设计内容 本课程设计主要是用C语言编写,设计的是一个模拟的多用户多级目录的文 件管理系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文 件操作的实现,加深对文件系统内部功能和实现过程的理解。 1.2主要设计思路 首先系统要完成初始化的任务,建立起整个系统,等待用户注册,注册成功后,用户登录模块,对用户的用户名进行验证,如果用户登录成功,则系统进入 等待用户输入的状态,用户选择相应指令后,系统按照即定方式处理用户请求, 用户退出后,系统转入登录模块,等待下一位用户的登录。 2、课程设计需求分析 本系统为多用户多级目录的文件管理系统,用户可以根据所注册的用户名登 陆来对文件或是文件进行操作。多用户功能可以满足不同用户不同的需求,同时 也起到了很好的保密作用。 文件系统为用户提供了按名存取的功能,以使得用户能透明地存储访问文

件。为了实现按名存取,文件需要对文件存储设备进行合理的组织,分配;对存储在文件存储设备上的文件进行保护,保密和提供共享的手段。另外,文件系统还要提供检索文件或文件中记录的手段,文件系统就是完成上述功能的一组软件和数据结构的集合。 模拟一个文件管理系统,要完成对文件的基本操作,文件的基本操作有文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。系统建立了文件目录树,存储文件系统中的所有文件。对于用户名下的文件,用文件目录树的分枝来存贮。 采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作就行了。 因为存在着同一个目录下不能有同名文件的问题。所以在进行文件的基本操作时要考虑到在已经有的文件中是否有同名文件,有的话则输出提示信息。 3、概要设计 3.1整体设计框架 系统初始化界面是由用户注册,用户登录,退出系统三个模块组成。用户登录模块再由创建用户,进入目录,删除用户,显示所有用户,显示位示图,修改用户资料几大模块组成。然后各个模块再由一些小模块组成。其中创建文件,打开关闭文件,读写文件等文件操作模块包括在进入目录模块里面。 3.2各模块的基本功能 3.21系统初始化 系统的初始化包括初始化了磁盘的空间即位示图、一个管理员用户 3.22用户注册模块 用户可以在这里注册,用户名和密码的最大长度都为10个字节,如果用户名不重复的话,则注册成功,用户的权限默认为一般用户。

个人档案管理课程设计

华北科技学院 课程设计说明书 课程名称:汇编语言 班级: 计算机B08-1 姓名: 胡诗招 学号: 200807014102 设计题目:个人档案管理文件 设计时间:2010年6月23号_至 2010年7月2号 _ 指导教师:______ 李冬艳_ ___________ 评语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____

一、课程设计目的 进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。 二、课程设计要求 1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。 2.遵循模块化、结构化的程序设计方法。 3.要求程序必须正确。 4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。 5.要求程序结构合理,语句使用得当。 6.适当追求编程技巧和程序运行效率。 三、课程设计题目: 个人档案管理文件 四、课题分析 程序开始时,先建立判断是否存在文件,如果不存在,就创立文件。然后随便输入i,l,q中任意一个字母,然后跳到相应的子程序,输入i诗,跳到输入的子程序,输入相应的数据,保存到文件里。当输入l时,保存在文件里的数据就会显示,每个学生的信息显示一行。当输入q时,直接关闭文件,程序结束

2017机械设计课程设计计算说明书模版(带 二级齿轮)

课程设计报告书题目:双级斜齿圆柱齿轮减速器设计 学院 专业 学生姓名 学生学号 指导教师 课程编号 130175 课程学分 2.0 起始日期 封面纸推荐用210g/m2的绿色色书 编辑完后需将全文绿色说明文字删除,格式不变

课程设计报告格式说明: 1.文字通顺,语言流畅,无错别字,电子版或手写版,手写版不得 使用铅笔书写。 2.请按照目录要求撰写;一级标题为一、二、……序号排列,内容 层次序号为:1、1.1、1.1.1……。 3.对于电子版:一级标题格式:宋体,4号,加粗,两端对齐。 4.对于电子版:正文格式:宋体,小4号,不加粗,行距为固定值 20磅,段前、段后为0行;首行缩进2字符;左右缩进0字符。 5.对于电子版:页边距:上2cm,下2cm,左2.5cm、右2cm页码: 底部居中。 6.所有的图须有图号和图名,放在图的下方,居中对齐。如:图1 模 拟计费系统用例图。 7.所有的表格须有表号和表名,放在表的上方,居中对齐。如:表1 计费功能测试数据和预期结果。 8.所有公式编号,用括号括起来写在右边行末,其间不加虚线。 9.图纸要求: 图面整洁,布局合理,线条粗细均匀,圆弧连接光滑,尺寸标注规范,文字注释必须使用工程字书写;必须按国家规定标准或工程要求绘制。

(参考文献范例) 参考文献 (参考文献标题为三号,宋体,加粗,居中,上下空一行) (正文为五号,宋体,行距为固定值20磅,重要资料必须注明具体出处,详细到页码;网上资料注明日期。) 1. 参考文献的著录采用顺序编码制,在引文处按论文中引用文献出现的先后以阿拉伯数字连续编码。参考文献的序号以方括号加注于被注文字的右上角,内容按序号顺序排列于文后。 2. 所引参考文献必须包含以下内容: *引用于著作的———作者姓名﹒书名﹒出版地:出版者,出版年﹒起止页码. 如:[1]周振甫. 周易译注[M].北京:中华书局,1991. 25. [2]Clark Kerr. The Uses of the University. Cambridge: Harvard University Press, 1995. 50. *引用于杂志的———作者姓名﹒文章名﹒刊名,年,卷(期):起止页码. 如:[1]何龄修.读顾诚《南明史》[J].中国史研究,1998,(3):16~173. [2]George Pascharopoulos. Returns to Education: A Further International Update and Implications. The Journal of Human Resources, 1985, 20(4): 36~38. *引用论文集、学位论文、研究报告类推。 *引用论文集中的析出文章的―― 如:[1]瞿秋白.现代文明的问题与社会主义[A].罗荣渠.从西化到现代化[C].北京:北京大学出版社,1990. 121~133.[2]Michael Boyle-Baise. What Kind of Experience? Preparing

操作系统课程设计-模拟文件系统

目录 第1章需求分析 (1) 第2章概要设计 (1) 2.1 系统的主要功能 (1) 2.2系统模块功能结构 (1) 2.3运行环境要求 (2) 2.4数据结构设计 (2) 第3章详细设计 (3) 3.1模块设计 (3) 3.2算法流程图 (3) 第4章系统源代码 (4) 第5章系统测试及调试 (4) 5.1运行结果及分析 (4) 5.2系统测试结论 (5) 第6章总结与体会 (6) 第7章参考文献 (6) 附录 (7)

第1章需求分析 通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力;掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,并了解操作系统的发展动向和趋势。 模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。 第2章概要设计 2.1 系统的主要功能 1) 系统运行时根据输入的用户数目创建主目录 2) 能够实现下列命令: L ogin 用户登录 Create 建立文件 Read 读取文件 Write 写入文件 D elete 删除文件 Mkdir 建立目录 Cd 切换目录 Logout 退出登录 2.2系统模块功能结构

2.3运行环境要求 操作系统windows xp ,开发工具vc++6.0 2.4数据结构设计 用户结构:账号与密码结构 typedef struct users { char name[8]; char pwd[10]; }users; 本系统有8个默认的用户名,前面是用户名,后面为密码,用户登陆时只要输入正确便可进入系统,否则提示失败要求重新输入。 users usrarray[8] = { "usr1","usr1", "usr2","usr2", "usr3","usr3", "usr4","usr4", "usr5","usr5", "usr6","usr6", "usr7","usr7", "usr8","usr8", }; (3)数据结构说明 a)文件结构链表 struct fnode { char filename[FILENAME_LENGTH]; int isdir; int isopen; char content[255]; fnode *parent; fnode *child; fnode *prev; fnode *next; }; b)函数介绍 fnode *initfile(char filename[],int isdir);//初始化文件或目录 void createroot();//建立系统根目录 int run();系统运行 int findpara(char *topara);对参数进行处理 bool chklogin(char *users, char *pwd);检查账号与口令 void help();命令列表 int mkdir();建立目录 int create();建立文件

web程序设计课程设计--文件管理系统

目录 一.项目背景 (2) 二.需求分析 (2) 1.系统需求分析 (2) 2.系统分析 (3) 三.后台数据库Microsoft SQL Server 2008 (4) 四.https://www.doczj.com/doc/e213562757.html, 2010 (4) 五.数据库设计 (4) 1.数据库设计 (4) 2.功能模块设计 (6) 3.系统功能流程 (7) 六.详细功能设计 (7) 七. 课程设计总结 (8) 八.问题与解答 (9)

一.项目背景 文件管理系统是信息技术在公司里管理中最典型的应用。传统文件管理模式是由人工去管理的,效率低下,无法适用于当前对文件管理的需求。文件管理系统基于网络技术,使办公室对文件的管理工作逐步信息化,从而形成由办公室人员与办公室设备共同构成服务于某种目标的人机文件处理系统,因而可以将跨地区的各个部门紧密连接在一起,从而达到对文件的实时共享,可以最大程度地发挥各级人员的工作效率。 通过以上分析,得出总结:文件管理是一个过程,因为网络化的文件管理系统并不局限于办公室,具有广泛的应用范畴。从领导各个业务部门乃至单位的所有工作人员,几乎人人都可能成为使用文件管理系统的用户。随着社会的发展与信息技术的进步,全球信息化的直拨越来越明显,任何单位与企业不再是局限于某一个地区,都在自觉不自觉在参与到了全球化的竞争中。在这个全球化的竞争中,政府机关企事业单位对信息的掌握程序,信息获取是否及果,信息能否得到充分的利用、对信息的瓜刘否敏感准确,已越来越成为徇其竞争能力的最重要因素。综上所述,文件管理系统的前景是非常广阔的。 二.需求分析 1.系统需求分析 随着国家信息基础建设的深入,规划用网络构建文件管理系统以实现管理员对文档的管理,同时实现了对文档的上传,下载,浏览共享文件和删除文件,同时每个用户还有不同的权限。在此让不同用户方便的实现了对文件的有效管理与其它相关信息的有效管理,为人们提供更广泛的、更便捷的信息及服务。 随着各个学校规模的不断扩大,学校内部对文件处理急剧增加。如果通过网络文件管理系统工作,就可以抛弃以入往传统的模式,发文件的一级一级传达的烦琐。用户只要上网就以查看上级添加而存放在数据库中的文件与相互交流信息的目的。因而根据学校对文件管理

二级圆柱齿轮减速器机械设计课程设计

目录 1、设计任务书 (2) 2、总体设计 (3) 3.传动零件的设计 (5) 4、轴的设计 (9) 5、滚动轴承校核 (13) 7、键的选择 (15) 8、滚动轴承的选择 (17) 9、联轴器的选择 (18) 10、箱体设计 (19) 11、润滑、密封设计 (23)

一、设计题目 1、设计题目 带式运输机传动系统中的展开式二级圆柱齿轮减速器 2、系统简图 系统简图如下图所示 3、工作条件 一、单向运转,有轻微振动,经常满载,空载启动,单班制工作(一天8小时),使用期限5年,输送带速度容许误差为±5%。 4、原始数据 五、设计工作量: 1、设计说明书一份 2、减速器装配图1张 3、减速器零件图2~3张 联轴器 减速器 联轴器 滚筒 输送带

二、总体设计 (一)、选择电动机 1、选择电动机的类型 根据动力源和工作条件,选用Y 型三相交流异步电动机。 2、确定电动机的功率 1)计算工作所需的功率 kW v F P w w w 80.11000 9 .010000.21000=??== 其中,带式输送机的效率0.95w η=。 2)通过查《机械设计基础课程设计》表10-1确定各级传动的机械效率:滚筒 1η=0.96;齿轮 2η=0.97;轴承 3η=0.99;联轴器 4η=0.99。总效率 085999.099.097.096.02322 433221=???==ηηηηη。 电动机所需的功率为:kW P P w 11.2859 .080 .10== = η 。 由表《机械设计基础课程设计》10-110选取电动机的额定功率为3kW 。 3)电动机的转速选940r/min 和1420r/min 两种作比较。 工作机的转速:min /3.5760000r D v n w ==π 结构紧凑,决定选用方案Ⅰ。 4)选定电动机型号为Y112M-6。查表《机械设计基础课程设计》10-111得电动机外伸轴直径D=28,外伸轴长度E=60,如下图所示。

操作系统课程设计文件系统

操作系统课程设计文件系统#include stdio.h #include memory.h #include string #include iostream using namespace std; struct FCB { char fname[16];//文件名 int type;//1代表普通文件2代表目录文件0表示空文件 int size;//文件大小 int fatherBlockNum;//当前的父目录盘块号 int currentBlockNum;//当前的盘块 void initialize() { strcpy(fname,"[message]"); type=0; size=0; fatherBlockNum=currentBlockNum=0; }

}; const char*FilePath="C:\myfiles"; const int BlockSize=512;//盘块大小(可配置) const int OPEN_MAX=5;//能打开最多的文件数 const int BlockCount=BlockSize/sizeof(int);//盘块数 const int DiskSize=BlockSize*BlockCount;//磁盘大小 const int BlockFcbCount=BlockSize/sizeof(FCB);//目录文件的最多FCB数 //const int IOBUF_SIZE=512; //char IOBuffer[IOBUF_SIZE]; int OpenFileCount=0; struct OPENLIST//用户文件打开表 { int files;//当前打开文件数 FCB f[OPEN_MAX];//FCB拷贝 OPENLIST() { files=0; for(int i=0;i OPEN_MAX;i++){ f[i].fatherBlockNum=-1;//为分配打开

【精选】操作系统课程设计(文件系统管理)文件

评定等级 操作系统课程设计 文件系统管理 学院计算机学院 专业计算机科学与技术 班级 姓名 学号 2013年1月8日 广东工业大学计算机学院制

文件系统管理 一、实验目的 模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法看, 加深了解文件系统的内部功能的实现。通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了 解。 二、实验内容和要求 编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。在用户程序中通过使用文件系统提供的create,open,read,write,close,delete 等文件命令,对文件进行操作。以下报告主要包括: 1.可行性分析 2.需求分析 3.概要设计 4.详细设计 5.测试 6.总结 三、可行性分析 1、技术可行性 对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。利用大二期间学习的数据结构可以模拟出此课程设计的要求。 2、经济可行性 课程设计作为本课程的练习及进一步加深理解。与经济无关,可以不考虑。(零花费,零收益) 3.法律可行性 自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。 四、需求分析 编写程序实现文件系统,主要有以下几点要求: 1、实现无穷级目录管理及文件管理基本操作 2、实现共享“别名” 3、加快了文件检索 五、概要设计 为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录 UFD (User File Directory )。这些文件目录可以具有相似的结构,它由用户所有文件的文件 控制块组成。此外,在系统中再建立一个主文件目录MFD (Master File Directory );在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目 录的指针。

机械设计课程设计二级减速器

机械设计课程设计 设计说明书 设计题目胶带式输送机传动装置 设计者 班级 学号 指导老师 时间

目录 一、设计任务书 (3) 二、传动方案拟定 (4) 三、电动机的选择 (4) 四、传动装置的运动和动力参数计算 (6) 五、高速级齿轮传动计算 (7) 六、低速级齿轮传动计算 (12) 七、齿轮传动参数表 (18) 八、轴的结构设计 (18) 九、轴的校核计算 (19) 十、滚动轴承的选择与计算 (23) 十一、键联接选择及校核 (24) 十二、联轴器的选择与校核 (25) 十三、减速器附件的选择 (26) 十四、润滑与密封 (28) 十五、设计小结 (29) 十六、参考资料 (29)

一.设计题目: 设计带式运输机传动装置(简图如下) 1——电动机 2——联轴器 3——二级圆柱齿轮减速器 4——联轴器 5——卷筒 6——运输带 原始数据: 数据编号 04 运送带工作拉力F/N 2200

1.工作条件:两班制,连续单向运转,载荷较平稳,空载启动,室内工作,有粉尘; 2.使用期:使用期10年; 3.检修期:3年大修; 4.动力来源:电力,三相交流电,电压380/220V; 5.运输带速度允许误差:±5%; 6.制造条件及生产批量:中等规模机械厂制造,小批量生产。 设计要求 1.完成减速器装配图一张(A0或A1)。 2.绘制轴、齿轮零件图各一张。 3.编写设计计算说明书一份。 二. 电动机设计步骤 1. 传动装置总体设计方案 本组设计数据: 第四组数据:运送带工作拉力F/N 2200 。 运输带工作速度v/(m/s) 0.9 , 卷筒直径D/mm 300 。 1.外传动机构为联轴器传动。 2.减速器为二级同轴式圆柱齿轮减速器。

操作系统文件管理实验报告

操作系统实验报告实验名称:文件管理 专业班级:网络工程1301 学号: 姓名: 2015 年6 月16 日

实验一文件管理 一、实验目的 文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、预备知识 1.VS2010的使用 2.C#的学习 3.文件主目录与子目录的理解 三、实验容与步骤 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write 等命令。 所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 程序流程图:

逻辑设计: 使用线性数组表表示MFD,泛型数组表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。 物理设计: //主目录 private FileUser[] mfd; //当前用户 private FileUser currentuser; ///

/// 文件 /// public class FileObject { public string filename; public int size=20; public int read=0; public int write = 0; public string author; } /// /// 文件系统用户 /// public class FileUser { public string username;

文件系统课程设计报告

操作系统课程设计报告 题目:文件系统 专业:软件工程 院系:信息管理学院 年级:大三软件Q1141 学号: 11150132 姓名:王毅 指导教师:李红艳 职称:副教授 湖北经济学院教务处制

目录 操作系统课程设计报告 一实验内容 (2) 二设计的基本概念和原理 (2) 三总体设计 (2) 2-1 文件的组织结 构............................................................. (2) 2-2 磁盘空间的管 理............................................................. (2) 2-3 目录结 构 (3) 2-4文件操 作 (4) 四详细设计 (4) 4-1 建立文件(create_file)流程 图 (4) 4-2 打开文件(open_file)流程 图 (6) 4-3读文件(read_file)流程 图 (7) 4-4 写文件(write_file)流程

图 (8) 4-5 关闭文件(close_file)流程 图 (9) 4-6 删除文件(delete_file)流程 图 (10) 4-7 显示文件内容(typefile)流程 图 (11) 4-8 建立目录(md)流程 图 (12) 4-9显示目录内容流程 图 (13) 五详细代码 (14) 六运行结果截图 (40) 七总结 (44) 八参考文献 (45) 一、实验内容 要求设计一个简单的文件系统,用文件模拟磁盘,实现以下功能: (1)支持多级目录结构; (2)实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件、关闭文件、改变文件属性。

操作系统课程设计-文件系统

模拟一个简单二级文件管理系统 设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 设计内容:模拟一个简单二级文件管理系统 一、实验内容描述 1 实验目标 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现. 2 实验要求 为DOS系统设计一个简单的二级文件系统.要求做到以下几点: ①可以实现下列命令: login 用户登录 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 ②列目录时要列出文件名、物理地址、保护码和文件长度. ③源文件可以进行读写保护. 二、程序主要内容 1设计思路 程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统. 在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file.p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容. 2 数据结构 file结构体系统文件数据结构: fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式0.只读;1.可写; 2.可读写; 3.保护、fname[]char,文件名; filemode结构体文件状态数据结构: isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式0.只读;1.可写;2.可读写;

实验五 文件管理

课程名称:操作系统 课程类型:必修 实验项目名称:文件管理 实验题目:设计一个多用户的文件系统 一、实验目的 随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、实验要求及实验环境 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write 等命令。所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系) 1.程序流程图

2.逻辑设计 使用线性表表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。该结构需支持以下操作:在尾部插入,查找,修改,在任意位置删除。3、物理设计 char UserName[SizeOfUser][SizeOfUserName];//用户ID long User;//当前用户标志 struct InfoOfFile { char Name[SizeOfFileName];//文件名 bool safe[3];//Read,Write,Execute long status;//ready,open; }UFD[SizeOfUser][SizeOfFile];

相关主题
文本预览
相关文档 最新文档