⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fpgl.cpp

📁 模拟操作系统管理内存方法
💻 CPP
字号:
// FPGL.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
struct CHCT;
struct COCT;
struct DCT;
//----------------------------------------------------------------------------
/*             数据结构                 */
struct CHCT
{
	char *name;
	bool attitude;
	COCT *back;
	COCT *prior;
	COCT *next;
};
struct COCT
{
	char *name;
	bool attitude;
	CHCT *chct;
	DCT  *prior;
	DCT  *next;
};
struct DCT
{
    char *name;
	int  type;
	bool attitude;
	COCT *coct;
	int  number;
	DCT  *next;
};

DCT  sdt0[10];                           //全局变量
CHCT chct0[10];
COCT coct0[10];
//--------------------------------------------------------------------------------------------
/*
void input(DCT *M)
{
	char name;
	printf("输入设备名:");
	scanf("%c",&name);
	M=(DCT *)malloc(sizeof(DCT));
	M->name=name;
	M->attitude=false;
	M->coct=NULL;
	M->number=0;
	M->type=-1;
	M->next=NULL;
	sdt[i]=M;

}
*/
//------------------------------------------------------------------------------
void init_dct(DCT *M)
{
	//M=(DCT *)malloc(sizeof(DCT));
	M->name="";
	M->attitude=false;
	M->coct=NULL;
	M->number=0;
	M->type=-1;
	M->next=NULL;

}
//----------------------------------
void init_coct(COCT *N)
{
	//N=(COCT *)malloc(sizeof(COCT));
	N->name="";
	N->attitude=false;
	N->chct=NULL;
	N->prior=NULL;
	N->next=NULL;
}
//-----------------------------------
void init_chct(CHCT *B)
{
	B->name="ch1";
	B->attitude=false;
	B->back=NULL;
	B->prior=NULL;
	B->next=NULL;
}
//--------------------------------------------------------------------------------
void init()
{
	int i;
	for(i=0;i<10;i++)
	{
		init_sdt(&sdt0[i]);
		init_coct(&coct0[i]);
		init_chct(&chct0[i]);
	}
	DCT *M;
	M=(DCT *)malloc(sizeof(DCT));
	init_dct(M);
	M->name="K";
	sdt0[0]=M;
	//------------------------------
	M=(DCT *)malloc(sizeof(DCT));
	init_dct(M);
	M->name="M";
	sdt0[1]=M;
	//------------------------------
	M=(DCT *)malloc(sizeof(DCT));
	init_dct(M);
	M->name="K";
	sdt0[2]=M;
	//------------------------------
    M=(DCT *)malloc(sizeof(DCT));
	init_dct(M);
	M->name="P";
	sdt0[3]=M;
	//------------------------------
	COCT *N;
	N=(COCT *)malloc(sizeof(COCT));
	init_coct(N);
	N->name="co1";
	coct0[0]=N;
	//-----------------------------
	N=(COCT *)malloc(sizeof(COCT));
	init_coct(N);
	N->name="co2";
	coct0[1]=N;
	//-----------------------------
	N=(COCT *)malloc(sizeof(COCT));
	init_coct(N);
	N->name="co3";
	coct0[2]=N;
	//----------------------------
	CHCT *B;
	B=(CHCT *)malloc(sizeof(CHCT));
	init_chct(B);
	B->name="ch1";
	chct0[0]=B;
	//-----------------------------
	B=(CHCT *)malloc(sizeof(CHCT));
	init_chct(B);
	B->name="ch2";
	chct0[1]=B;
	//-----------------------------
	std0[0].coct=coct0[0];
	std0[1].coct=coct0[0];
	std0[2].coct=coct0[1];
	std0[3].coct=coct0[2];
	coct0[0].chct=chct0[0];
	coct0[1].chct=chct0[1];
	coct0[2].chct=chct0[1];

}
//------------------------------------------------------------------------------
void addD()
{
	char name;
	int flag1=0;
	DCT *M;
	printf("输入设备名:");
	scanf("%c",&name);
	for(int i=0;i<10;i++)
	{
     	if(dct0[i].name==name)                                  
			flag1=1;
	}
	if(flag1==1)
		printf("error:  你申请的设备已经存在!\n");                  //错误,设备已经存在
	else                                                             //设备不存在时     
	{ 
		M=(DCT *)malloc(sizeof(DCT));
		M->name=name;
		M->attitude=false;
		M->coct=NULL;
		M->number=0;
		M->type=-1;
		M->next=NULL;
		printf("是否为该设备添加一个驱动器:(y/n)");
		char flag;
		scanf("%c",&flag);
		if(flag=='y'||flag=='Y')                        //          加新的驱动器
		{
			COCT *temp;
			init_coct(temp);
			printf("输入驱动器的名称:");
			char *name1;
			scanf("");                                  //???????   从键盘读入字串
			strcpy(temp->name,name1);
			M->coct=temp;
			while(1)
			{
				printf("输入通道的名称:"); 
				int i=0;
				char *name3;
				scanf(name3);                                  //?????????????   从键盘读字符串
				while(chct0[i].name!=name3&&i<10)
				{
					if(chct[i].name==name3)
						flag1=1;
					else
						i++;
				}
				if(i==10)                                        
				{
					printf("你输入的通道名字有错!没有此通道。\n");
                    printf("重新");
				}
				else 
				{
					temp->chct=chct[i];
				}
			}


		}
		else                                          //           不加新的驱动器
		{
			printf("输入原有的驱动器的名称:");
			char *name2;
			scanf("");                                 //?????????????????????   从键盘读入字串
			int i=0;
		    while(coct0[i].name!=name2&&i<10)             	//????????????
			{
				i++;
			}
			if(i==10)
			{
				printf("error :   驱动器不存在!\n");
			    printf("重新");
			}
			else
                M->coct=coct0[i];
		}
	}

}
//------------------------------------------------------------------------------------------------
void deleteD()
{
	int flag=0;
	int i=0;
	char *name;
	printf("输入你要删除的设备名字:");
	scanf(""name);
	while(sdt0[i]!=name&&i<10)
	{
		i++;
	}
	if(i==10)                                           //设备不存在时
	{
		printf("error:   你输入的设备不存在!\n");
		printf("重新" );
	}
	else                                                //正常删除设备
	{
        int j=0;
		while(j<10)
		{
			if(j!=i)
			     if(sdt0[j].coct==sdt0[i].coct)
				 {
					 flag=1;
				 }

		}
		if(flag==1)                                     //只删除设备,驱动器不删除
		{
		   delete(sdt0[i]);
		}
		else                                           //删除设备,驱动器也删除
		{
			delete(sdt0[i].coct);
			delete(sdt0[i]);
		}

	}

}
//-----------------------------------------------------------------------------------------------
void set_forD()
{
	printf("输入你要申请设备的名称:");
	char *name;
	scanf("",name);
	while(sdt0[i].name!=name&&i<10)
	{
		i++;
	}
	if(i==10)
	{
		printf("你输入的设备不存在,你不能申请!\n");
	    printf("重新");
	}
	else                                                     //申请成功
	{
		if(sdt0[i].attitude==false)
			sdt0[i].attitude=true;
		else
		{

		}
	}

}
//-----------------------------------------------------------------------------------------------

int main(int argc, char* argv[])
{
	//sdt=(DCT *)malloc(10*sizeof(DCT));
	init();
	char ch;
	scanf("%c",&ch);
	while(ch!=#)
	{
		swich(ch)
		{
			case 'a':
			case 'A': addD();break;
			case 'd':
			case 'D': deleteD();break;
			case 's':
			case 'S': set_forD();break;
			case 'r':
			case 'R': relaxD();break;
			defaut:
				printf("input the command is error!\n");
		}
		scanf("%c",&ch);
	}	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -