操作系统实验报告模板
更新时间: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并打开写入“操作系统之文件系统练习”的内容并读出的显示
正在阅读:
操作系统实验报告模板07-24
电子考场网络视频监控建设方案09-14
苏教版一年级数学下册第三单元《认识100以内的数》教案12-01
基于systemview的ssb仿真03-31
当代大学生如何弘扬抗战精神03-26
qq空间寄语02-07
安全监控系统技术资料管理制度标准范本_104-30
打开图像文件和编辑 ENVI 文件头03-10
班主任素质大赛情景答辩试题06-01
浅谈中职flash教学04-06
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 操作系统
- 模板
- 实验
- 报告
- 人教版七年级语文上册第三单元第11课《春》教学设计方案
- 大家都做投资创业吧
- 生鲜商品的保鲜技巧_绿缔冷藏展示柜经验技巧02110724
- 角动量算符的本征值方程求解
- 高中数学必修二与四
- 人防工程监理实施细则
- 交流耐压试验中有哪些种类(工频耐压,感应耐压,谐振耐压)
- 湛江市科学和技术发展“十二五”规划
- WORK6018_International Industrial Relations_2010 Semester Summer_WORK6018_China & India_SUMMER.2010
- 孔子拜师 第二课时
- 如何解决农村剩余劳动力
- 中医药科技文献数据库的建设与共享亟待支持
- 2016年保理市场现状与发展趋势预测
- 南京中医药大学方剂学试卷——史上最全
- 如何培养学生的课外阅读兴趣
- 汽车运价规则-交运发275号
- 八年级语文下册《再塑生命》课堂实录
- 消费者行为学-教案
- 2012年解三角形常用变换公式及经典例题.
- 轮机维护与修理 第二章(培训教材)