操作系统实验报告模板

更新时间:2023-07-24 07:49:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

操作系统上机

实 验 报 告

班 级: 学 号: 姓 名: 实验地点: 实验时间:

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

实验一 进程的建立

【实验目的】

创建进程及子进程 在父子进程间实现进程通信 【实验软硬件环境】

Linux 、Windows98、Windows2000 【实验内容】

创建进程并显示标识等进程控制块的属性信息; 显示父子进程的通信信息和相应的应答信息。 (进程间通信机制任选)

【实验程序及分析】

编程思路:首先本程序在Linux用C语言完成的,父子进程的创建用fork函数来实现,然后是父子进程间的通信,这里用pipe实现。可以定义chan1[2], chan1[2],chanx[0]表示读,chanx[1]表示写。他们配合使用。 【实验截图】

【实验心得体会】

通过这次上机练习,我熟悉了用c++实现进程的创建,销毁,父子进程间的通讯等一系列课程中需要学习的内容。本来进程的概念在一开始我始终无法清晰地理解,但是通过自己用mfc的方法去实现它后,我开始慢慢地理解操作系统的进程的运作机制。

虽然,我只是实现了一个父子进程的创建和通讯,但是,管中窥豹,我想自己开始明白一个操作系统正是由很多这种进程实现功能的。其中,系统整体的进程调度,管理等等还有很多东西等着我们去进一步学习、理解。

实验二 进程间的同步

【实验目的】

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

理解进程同步和互斥模型及其应用 【实验软硬件环境】

Linux 、Windows98、Windows2000 【实验内容】

利用通信API实现进程之间的同步: 建立司机和售票员进程; 并实现他们间的同步运行。

【实验程序及分析】

程序总体思路:由于本次试验时用PV操作实现的互斥与同步模型,所以先实现P、V操作的函数,然后在主程序中利用PV操作函数实现司机和售票员的同步。司机和售票员分别为父进程和子进程,假设司机停车开门,此时为父进程中运行,然后申请开车,但是此时乘客没上车,所以只能阻塞。此时进入子进程,乘客上车,关门,售票员检票,释放开车,然后死机开车,到站,释放开车门。如此循环。

示意图

#include<stdio.h>

#include<stdlib.h>

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

#include<signal.h> #include<unistd.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h>

#include<fcntl.h> //这些是完成以下操作所需要的头文件 int runid=0,stopid=0;

int P(int semid) //P操作实现函数 {

struct sembuf buf={0,-1,0}; //Linux

系统自带的结构体,返回值表示操作申请成功与否 if(semop(semid,&buf,1)==-1) { perror("P operation failed!\n"); return -1;

} return 0;

}

int V(int semid) { struct sembuf buf={0,1,0}; if(semop(semid,&buf,1)==-1) { perror("V operation failed!\n"); return -1;

}

return 0;

} int main() { if(fork()==0) { while(1) { P(runid); printf("\n"); printf("汽车启动\n");

printf("汽车到站\n");

V(stopid); }

}

else { while(1) { printf("乘务员开车门\n"); printf("乘务员关车门\n"); V(runid); printf("售票\n"); P(stopid);

printf("乘务员关车门\n"); }

} return 0;

}

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

【实验截图】

在linux下运行结果

【实验心得体会】

这次的上机内容是有关我们上课学习的PV操作实现进程同步和互斥模型。在我看来,这是进一步展开操作系统的整个进程机制。在此次实验中,我在Linux系统里用C语言实现了课本上有关司机和售票员同步运行的过程,以此来模拟进程的同步互斥模型。

首先,这是我第一次在Linux系统环境下进行编程,也是我第一次接触Linux系统。因此,一开始,总觉得很不方便,所有的操作得在终端中运行,就像Windows系统下的DOS环境一样。但是我觉得只要掌握了几个命令其实也是很方便的。由于Linux中支持P、V操作的一些结构体,所以很简单就可以写出P,V操作得函数。

总之,此次实验不但帮我进一步理解了进程同步和互斥模型,还使我了解Linux系统下的C编程。

实验三 文件系统的设计与基本操作的实现

【实验目的】

理解文件系统的组织结构 理解文件系统的描述结构 【实验软硬件环境】

Linux 、Windows98、Windows2000 【实验内容】

选择一种操作系统(UNIX),理解其文件系统结构。

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

设计并实现文件系统的描述结构; 显示文件系统中文件的属性;

给出文件系统最基本操作的仿真实现。

【实验程序及分析】 程序中带有详细的解释。

整体编程思路为: 首先建立文件系统的基本存储部分,包括结构体变量等等的定义,主要利用数组的存储功能模拟文件系统。除了基本的目录查看,目录创建、删除,文件创建、删除外,我还增加了文件的读写的函数,实现了文件的读出与写入。但由于用的是数组存储,所以有长度限制,具体可参加程序注释。#include <stdio.h> #include <memory.h> #include <string> #include <iostream> using namespace std;

//1代表普通文件2代表目录文件0表示空文件

//基本变量常量定义去 #define GENERAL 1 #define DIRECTORY 2 #define NULL 0 int OpenFileCount = 0; struct FCB {

char fname[16]; //文件名 char type; int size; //文件大小

int fatherBlockNum; //当前的父目录盘块号

int currentBlockNum; //当前的盘块 void initialize()

{

strcpy(fname,"/0"); type = NULL; size =0; fatherBlockNum = currentBlockNum = 0; } };

/*常量设置*/

const char* FilePath = "C://myfiles"; const int BlockSize = 512; //盘块大小 const int OPEN_MAX = 5; //能打开最多的文件数

const int BlockCount = 128; //盘块数 const int DiskSize = BlockSize*BlockCount; //磁盘大小

const int BlockFcbCount =

BlockSize/sizeof(FCB);//目录文件的最多FCB数

struct OPENLIST //用户文件打开表 {

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

int files; //当前打开文件数 FCB f[OPEN_MAX]; //FCB拷贝 OPENLIST() {

files=0;

for(int i=0;i<OPEN_MAX;i++){ f[i].fatherBlockNum=-1;//为分配打开

f[i].type=GENERAL; } } };

/*-------------目录文件结构---------------*/ struct dirFile {

struct FCB fcb[BlockFcbCount]; void init(int _FatherBlockNum,int _CurrentBlockNum,char *name)//父块号,当前块号,目录名 {

strcpy(fcb[0].fname,name); //本身的FCB

fcb[0].fatherBlockNum=_FatherBlockNum;

fcb[0].currentBlockNum=_CurrentBlockNum;

fcb[0].type=DIRECTORY; //标记目录文件

for(int i=1;i<BlockFcbCount;i++){

fcb[i].fatherBlockNum=_CurrentBlockNum; //标记为子项

fcb[i].type=NULL; // 标记为空白项 } } };

/**********************************************************************/ struct DISK {

int FAT1[BlockCount]; //FAT1 int FAT2[BlockCount]; //FAT2 struct dirFile root; //根目录 char data[BlockCount-3][BlockSize]; void format() {

memset(FAT1,0,BlockCount); //FAT1

memset(FAT2,0,BlockCount); //FAT2

FAT1[0]=FAT1[1]=FAT1[2]=-2; //0,1,2盘块号依次代表FAT1,FAT2,根目录区

FAT2[0]=FAT2[1]=FAT2[2]=-2; //FAT作备份

root.init(2,2,"C://");//根目录区

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

memset(data,0,sizeof(data));//数据区 } };

/*-----------------全局变量--------------------------*/ FILE *fp; //磁盘文件地址

char * BaseAddr; //虚拟磁盘空间基地址 string currentPath="C://"; //当前路径 int current=2; //当前目录的盘块号 string cmd; //输入指令

struct DISK *osPoint; //磁盘操作系统指针

char command[16]; //文件名标识 struct OPENLIST* openlist; //用户文件列表指针

/*-----------函数事先申明--------------------*/ int mkdir(char *sonfname); int create(char *name); int listshow(); int delfile(char *name);

//int changePath(char *sonfname); int write(char *name); int exit();

int open(char *file); int close(char *file); int read(char *file);

/*------------初始化-----------------------*/ int format()

{

current = 2;

currentPath="C://"; //当前路径 osPoint->format();//打开文件列表初始化

delete openlist;

openlist=new OPENLIST;

/*-------保存到磁盘上myfiles--------*/ fp = fopen(FilePath,"w+");

fwrite(BaseAddr,sizeof(char),DiskSize,fp); fclose(fp);

printf("----------------------------------------------------------\n\n"); return 1; }

/*-----------------------创建子目录-------------------*/

int mkdir(char *sonfname) {

//判断是否有重名 //寻找空白子目录项 //寻找空白盘块号

//当前目录下增加该子目录项 //分配子目录盘块,并且初始化 //修改fat表 int i,temp,iFAT;

struct dirFile *dir; //当前目录的指

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

/*--------为了避免该目录下同名文件夹--------*/

for(i = 1;i<BlockFcbCount;i++) {

if(dir->fcb[i].type==DIRECTORY &&

strcmp(dir->fcb[i].fname,sonfname)==0 ) {

printf("该文件夹下已经有同名的文件夹存在了!\n"); return 0; } }

//查找空白fcb序号

for(i=1;i<BlockFcbCount;i++) {

if(dir->fcb[i].type==NULL) break; }

if(i==BlockFcbCount) {

printf("该目录已满!请选择新的目录下创建!\n");

return 0; }

temp=i;

for(i = 3;i < BlockCount;i++) {

if(osPoint->FAT1[i] == 0) break; }

if(i == BlockCount) {

printf("磁盘已满!\n"); return 0; }

iFAT=i;

/*-------------接下来进行分配----------*/

osPoint->FAT1[iFAT]=osPoint->FAT2[iFAT] = 2; //2表示分配给下级目录文件 //填写该分派新的盘块的参数 strcpy(dir->fcb[temp].fname,sonfname); dir->fcb[temp].type=DIRECTORY;

dir->fcb[temp].fatherBlockNum=current; dir->fcb[temp].currentBlockNum=iFAT;

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

//初始化子目录文件盘块 dir=(struct dirFile*)(osPoint->data [iFAT-3]); //定位到子目录盘块号 dir->init (current,iFAT,sonfname);//iFAT是要分配的块号,这里的current用来指要分配的块的父块号

printf("---------------------------------------------------------------\n\n"); return 1; }

/*-------删除当前目录下的文件夹--------*/ int rmdir(char *sonfname) {

int i,temp,j;//确保当前目录下有该文件,并记录下该FCB下标

struct dirFile *dir; //当前目录的指针

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

for(i=1;i<BlockFcbCount;i++) { //查找该目录文件

if(dir->fcb[i].type==DIRECTORY

&&

strcmp(dir->fcb[i].fname,sonfname)==0) { break; } }

temp=i;

if(i==BlockFcbCount) {

printf("当前目录下不存在该子目录!\n"); return 0; }

j = dir->fcb[temp].currentBlockNum; struct dirFile *sonDir; //当前子目录的指针

sonDir=(struct dirFile *)(osPoint->data [ j - 3]);

for(i=1;i<BlockFcbCount;i++) //查找子目录是否为空目录 {

if(sonDir->fcb[i].type!=NULL) {

printf("该文件夹为非空文件夹,为确保安全,请清空后再删除!\n"); return 0;

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

} }

/*开始删除子目录操作*/

osPoint->FAT1[j] = osPoint->FAT2[j]=0; //fat清空

char *p=osPoint->data[j-3]; //格式化子目录

memset(p,0,BlockSize);

dir->fcb[temp].initialize(); //回收子目录占据目录项

printf("---------------------------------------------------------------\n\n"); return 1; }

/*-----------在当前目录下创建文本文件---------------*/ int create(char *name) {

int i,iFAT;//temp,

int emptyNum = 0,isFound = 0; //空闲目录项个数

struct dirFile *dir; //当前目录的指针

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

//查看目录是否已满 //为了避免同名的文本文件 for(i=1;i<BlockFcbCount;i++) {

if(dir->fcb[i].type == NULL && isFound == 0) {

emptyNum = i; isFound = 1; }

else if(dir->fcb[i].type==GENERAL && strcmp(dir->fcb[i].fname,name)==0 ) {

printf("无法在同一目录下创建同名文件!\n"); return 0; } }

if(emptyNum == 0) {

printf("已经达到目录项容纳上限,无法创建新目录!\n"); return 0; }

//查找FAT表寻找空白区,用来分配磁盘块号j

for(i = 3;i<BlockCount;i++)

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

{

if(osPoint->FAT1[i]==0) break; }

if(i==BlockCount) {

printf("磁盘已满!\n"); return 0; } iFAT=i;

/*------进入分配阶段---------*/ //分配磁盘块 osPoint->FAT1[iFAT] = osPoint->FAT2[iFAT] = 1;

/*-----------接下来进行分配----------*/

//填写该分派新的盘块的参数

strcpy(dir->fcb[emptyNum].fname,name); dir->fcb[emptyNum].type=GENERAL;

dir->fcb[emptyNum].fatherBlockNum=current;

dir->fcb[emptyNum].currentBlockNum=iFAT;

dir->fcb[emptyNum].size =0; char* p = osPoint->data[iFAT -3]; memset(p,4,BlockSize);

printf("----------------------------------------------------------------\n\n"); return 1; }

/*-------查询子目录------------*/ int listshow() {

int i,DirCount=0,FileCount=0; //搜索当前目录

struct dirFile *dir; //当前目录的指针

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

for(i=1;i<BlockFcbCount;i++) {

if(dir->fcb[i].type==GENERAL) { //查找普通文件 FileCount++; printf("%s 文本文件./n",dir->fcb[i].fname); }

if(dir->fcb[i].type==DIRECTORY) { //查找目录文件 DirCount++;

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

printf("%s 文件夹./n",dir->fcb[i].fname); } }

printf("\n该目录下共有 %d 个文本文件, %d 个文件夹/n/n",FileCount,DirCount);

printf("--------------------------------------------------------\n\n"); return 1; }

/*---------在当前目录下删除文件-----------*/

int delfile(char *name) {

int i,temp,j;

//确保当前目录下有该文件,并且记录下它的FCB下标

struct dirFile *dir; //当前目录的指针

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

for(i=1;i<BlockFcbCount;i++) //查找该

文件 {

if(dir->fcb[i].type==GENERAL && strcmp(dir->fcb[i].fname,name)==0) { break; } }

if(i==BlockFcbCount) {

printf("当前目录下不存在该文件!\n"); return 0; } int k;

for(k=0;k<OPEN_MAX;k++) {

if((openlist->f [k].type = GENERAL)&&

(strcmp(openlist->f [k].fname,name)==0)) {

if(openlist->f[k].fatherBlockNum == current) { break; }

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

else {

printf("该文件未在当前目录下!\n");

return 0; } } }

if(k!=OPEN_MAX) {

close(name); }

//从打开列表中删除 temp=i;

/*开始删除文件操作*/

j = dir->fcb [temp].currentBlockNum ; //查找盘块号j

osPoint->FAT1[j]=osPoint->FAT2[j]=0; //fat1,fat2表标记为空白 char *p=osPoint->data[j - 3]; memset(p,0,BlockSize); //清除原文本文件的内容

dir->fcb[temp].initialize(); //type=0; //标记该目录项为空文件

printf("------------------------------------------------------------\n\n");

return 1; }

/*--------System exit---------------------*/ int exit() {

//将所有文件都关闭

//保存到磁盘上C:/myfiles fp=fopen(FilePath,"w+");

fwrite(BaseAddr,sizeof(char),DiskSize,fp); fclose(fp);

//释放内存上的虚拟磁盘 free(osPoint);

//释放用户打开文件表 delete openlist;

printf("---------------------------------------------------------\n\n"); return 1; }

/*-------------在指定的文件里记录信息---------------*/ int write(char *name) { int i;

char *startPoint,*endPoint; //在打开文件列表中查找 file(还需要考虑同名不同目录文件的情况!!!)

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

for(i=0;i<OPEN_MAX;i++) {

if(strcmp(openlist->f [i].fname,name)==0 ) {

if(openlist->f[i].fatherBlockNum ==current) { break; } else {

printf("该文件处于打开列表中,本系统只能改写当前目录下文件!\n");

return 0; } } }

if(i==OPEN_MAX) {

printf("该文件尚未打开,请先打开后写入信息!!\n"); return 0; }

int active=i; int fileStartNum =

openlist->f[active].currentBlockNum - 3 ;

startPoint =

osPoint->data[fileStartNum];

endPoint = osPoint->data[fileStartNum + 1];

printf("请输入文本以Ctrl D号结束:\t");

char input;

while(((input=getchar())!=4)) {

if(startPoint < endPoint-1) {

*startPoint++ = input; } else {

printf("达到单体文件最大容量!");

*startPoint++ = 4; break; } } return 1; }

/*---------选择一个打开的文件读取信息----------*/ int read(char *file) {

int i,fileStartNum;

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

char *startPoint,*endPoint; //struct dirFile *dir;

//在打开文件列表中查找 file(还需要考虑同名不同目录文件的情况!!!) for(i=0;i<OPEN_MAX;i++) {

if(strcmp(openlist->f [i].fname,file)==0 ) {

if(openlist->f[i].fatherBlockNum ==current) { break; } else {

printf("该文件处于打开列表中,本系统只能阅读当前目录下文件!\n");

return 0; } } }

if(i==OPEN_MAX) {

printf("该文件尚未打开,请先打开后读取信息!\n"); return 0; }

int active=i;

//计算文件物理地址 fileStartNum =

openlist->f[active].currentBlockNum - 3 ; startPoint =

osPoint->data[fileStartNum];

endPoint = osPoint->data[fileStartNum + 1];

//end_dir=(struct dirFile *)[BlockSize-1];

//q=(char *)end_dir;

printf("该文件的内容为: "); while((*startPoint)!=4&& (startPoint < endPoint)) {

putchar(*startPoint++); }

printf("\n"); return 1; }

/*当前目录下添加一个打开文件*/ int open(char *file)//打开文件 {

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

int i,FcbIndex;

//确保没有打开过该文件 = 相同名字 + 相同目录

for(i=0;i<OPEN_MAX;i++) {

if(openlist->f[i].type ==GENERAL && strcmp(openlist->f [i].fname,file)==0 &&openlist->f[i].fatherBlockNum == current) {

printf("该文件已经被打开!\n"); return 0; } }

//确保有空的打开文件项 if(openlist->files == OPEN_MAX) {

printf("打开文件数目达到上限!无法再打开新文件.\n"); return 0; }

//确保当前目录下有该文件,并且记录下它的FCB下标

struct dirFile *dir; //当前目录的指针

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

for(i = 1;i< BlockFcbCount;i++) { //查找该文件

if(dir->fcb[i].type==GENERAL && strcmp(dir->fcb[i].fname,file)==0 ) {

FcbIndex=i; break; } }

if(i==BlockFcbCount) {

printf("当前目录下不存在该文件!\n"); return 0; }

//装载新文件进入打开文件列表,(FCB信息,文件数++) ??难道名字过不来? openlist->f[OpenFileCount] = dir->fcb[FcbIndex]; //FCB拷贝 openlist->files ++; printf("文件打开成功!\n"); OpenFileCount++; return 1; }

int close(char *file)

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

{

//释放该文件所占内存 //释放用户打开文件列表表项 int i;

//在打开文件列表中查找 file(还需要考虑同名不同目录文件的情况!!!) for(i=0;i<OPEN_MAX;i++) {

if((openlist->f [i].type = GENERAL)&&

(strcmp(openlist->f [i].fname,file)==0)) {

if(openlist->f[i].fatherBlockNum == current) { break; } else {

printf("该文件已打开,但未在当前目录下,无法关闭!\n"); return 0; } } }

if(i==OPEN_MAX) {

printf("该文件未在打开列表

中!\n"); return 0; }

int active=i; openlist->files --;

openlist->f[active].initialize(); OpenFileCount--; printf("该文件已关闭!\n"); return 1; } void main() {

/*********************************************************************/ printf("*************我的文件系统

************************* \n");

printf("1. exit :安全退出 \n");

printf("2. mkdir dirname :创建目录. \n");

printf("3. rmdir dirname :删除目录. \n");

printf("4. ls dirname :显示当前目录下信息. \n");

printf("5. create filename :创建一个新文件,并且打开. \n");

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

printf("6. write filename :选择一个打开的文件写入信息 \n");

printf("7. read filename :选择一个打开的文件读取信息. \n");

printf("--------------------------------------------------------------\n\n");

printf("8. rm filename :删除文件. while(1){ \n");

cout<<currentPath;

printf("9. open filename :打开文件. \n");

printf("10. close filename :关闭文件. \n");

//创建用户文件打开表 openlist=new OPENLIST; //申请虚拟空间并且初始化 BaseAddr=(char *)malloc(DiskSize); //虚拟磁盘初始化

osPoint=(struct DISK *)(BaseAddr); //加载磁盘文件

if((fp=fopen(FilePath,"r"))!=NULL){

fread(BaseAddr,sizeof(char),DiskSize,fp); printf("加载磁盘文件( %s )成功,现 在可以进行操作了!\n\n",FilePath); }

else{

printf("这是你第一次使用该文件 管理系统!\t正在初始化...\n"); format();

printf("初始化已经完成,现在可以 进行操作了!\n\n"); }

cin>>cmd; if(cmd=="mkdir"){

cin>>command; mkdir(command); }

else if(cmd=="rmdir"){ cin>>command; rmdir(command); }

else if(cmd=="ls"){ listshow(); }

else if(cmd=="create"){ cin>>command; create(command); } else if(cmd=="write"){ cin>>command; write(command); }

else if(cmd=="read"){ cin>>command; read(command);

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

}

else if(cmd=="rm"){ cin>>command; delfile(command); }

else if(cmd=="open"){ cin>>command; open(command); }

else if(cmd=="close"){ cin>>command; close(command);

}

else if(cmd=="exit"){ exit(); break; }

else cout<<"无效指令,请重新输入:"<<endl; }

printf("Thank you for using my file system!\n"); }

【实验截图】

这是刚打开时的界面

这是操作系统课程中的四次实验最终报告,内包括进程通信实验,进程同步互斥实验,文件系统模拟实验和Linux shell操作。里面的程序都是我运行过的。

这是创建wan 的子目录

这是进行了创建wan.txt并打开写入“操作系统之文件系统练习”的内容并读出的显示

本文来源:https://www.bwwdw.com/article/grkm.html

Top