操作系统实验报告模板
更新时间:2023-08-20 10:39: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并打开写入“操作系统之文件系统练习”的内容并读出的显示
正在阅读:
操作系统实验报告模板08-20
振动分析与实验基础实验指导书112-18
小学班主任教育随笔02-07
政协委员履职工作总结05-30
第10课 春秋战国的科技与文艺03-09
切削运动、加工表面和切削用量三要素06-01
以台阶为话题的作文03-12
棉花姑娘最新公开课优质教学设计12-18
STC系列单片机串口通信的总结01-11
尔雅通识课意大利文化期末考试201608-16
- 2012诗歌鉴赏讲座 师大附中张海波
- 2012-2013学年江苏省苏州市五市三区高三(上)期中数学模拟试卷(一)
- 市政基础设施工程竣工验收资料
- 小方坯连铸机专用超越离合器(引锭杆存放用)
- 荀子的学术性质之我见
- 氩弧焊管轧纹生产线操作说明
- 小学科学六年级上册教案
- (商务)英语专业大全
- 外汇储备的快速增长对我国经济发展的影响
- 幼儿园中班优秀语言教案《小猴的出租车》
- 第七章 仪表与显示系统
- 身份证号码前6位行政区划与籍贯对应表
- 单位(子单位)工程验收通知书
- 浅谈地铁工程施工的项目成本管理
- 沉积学知识点整理
- 前期物业管理中物业服务企业的法律地位
- 2014微量养分营养试卷
- 地质专业校内实习报告范文(通用版)
- 内部审计视角下我国高校教育经费支出绩效审计研究
- 高次插值龙格现象并作图数值分析实验1
- 操作系统
- 模板
- 实验
- 报告
- 烟价〔2010〕 号 - 烟台市物价局 首页
- 南京中医药大学方剂学试卷——史上最全
- 人事制度范本
- 自考 政治经济学 模拟题 简答论述部分
- 2012年教育心理学考试试卷
- 儿童屈光不正性弱视的散光分析
- 文化视野下农村学校布局调整的反思
- 县级农田水利规划
- usb接口黄色感叹号,usb接口黄色感叹号,注册表损坏或不完整问题的解决方案
- 语文人教版四年级下册 22、《牧场之国》教案
- Book7Unit1-writing(基础写作建议信)
- 如图所示,斜面倾角为θ,位于斜面底端A正上方的小球以初速度v0正对斜面
- 如何做好老年痴呆患者的护理工作()
- 全面开展党工共建创先争优活动实施方案
- 八年级语文下册《再塑生命》课堂实录
- 冲压车间快速换模改善案例
- 两基金分离定理
- Models of solar energetic particle fluxes- the main requirements and development prospects
- 现代工程制图习题集 章3
- 申报中学体育高级教师述职报告