📄 os.cpp
字号:
#include "Porcess.h"
#include "File.h"
#include "Memory.h"
MangerFile()
{
char name[20],buffer[64];
int attribute,type,length,I,a;
/*建立文件,模拟磁盘*/
if((fc=fopen("c:\\c.txt","w+"))==NULL)
{
printf("无法打开文件\n");
return 0;
}
/*初始化已打开文件夹*/
openfile.length=0;
/*初始化磁盘*/
/*初始化文件分配表*/
buffer1[0]=buffer1[1]=buffer1[2]=255; /*磁盘第0,1块存放FAT表,第2块存放根目录*/
for(I=3;I<64;I++)
buffer1[I]=0;
buffer1[13]=buffer1[49]=254; /*假定模拟磁盘中有两个坏盘块:第13块和49块*/
fwrite(buffer1,64L,1,fc);
for(I=0;I<64;I++)
buffer1[I]=0;
fwrite(buffer1,64L,1,fc);
/*初始化根目录*/
for(I=0;I<8;I++)
buffer2[I].name[0]='$';
fwrite(buffer2,64L,1,fc);
/*已初始化已打开文件表*/
while(1)
{
printf("\n0 -结束\n");
printf("1 -建立文件\n");
printf("2 -打开文件\n");
printf("3 -读文件\n");
printf("4 -写文件\n");
printf("5 -关闭文件\n");
printf("6 -删除文件\n");
printf("7 -建立目录\n");
printf("8 -显示目录内容\n");
printf("9 -删除目录\n");
printf("10-显示文件内容\n");
printf("11-改变文件属性\n");
printf("选择功能项(0~11):");
scanf("%d",&a);
switch(a)
{
case 0: /*a=程序结束*/
fclose(fc);
return 0;
case 1: /*a=1建立文件*/
printf("输入文件路径名和文件属性(1-只读文件,3-只读系统文件,4-普通文件):");
scanf("%s%d",name,&attribute);
create_file(name,attribute); /*建立文件*/
break;
case 2: /*a=2打开文件*/
printf("输入文件路径名和操作类型(0-读文件,1-写文件):");
scanf("%s%d",name,&type);
open_file(name,type); /*打开文件*/
printf("文件%s已经打开.",name);
break;
case 3: /*a=3读文件*/
printf("输入文件路径和读长度");
scanf("%s%d",name,&length);
read_file(name,length); /*读文件*/
break;
case 4: /*a=4写文件*/
printf(" 输入文件路径名:");
scanf("%s",name);
printf(" 输入写的内容和和写长度");
scanf("%s%d",buffer,&length);
write_file(name,buffer,length); /*写文件*/
break;
case 5: /*a=5关闭文件*/
printf("输入文件路径名");
scanf("%s",name);
close_file(name); /*关闭文件*/
break;
case 6: /*a=6删除文件*/
printf("输入文件路径名");
scanf("%s",name);
deletefile(name); /*删除文件*/
break;
case 7: /*a=7 建立目录*/
printf("输入目录路径名");
scanf("%s",name);
md(name); /*建立目录*/
break;
case 8: /*a=8显示目录*/
printf("输入目录路径名");
scanf("%s",name);
dir(name); /*显示目录*/
break;
case 9: /*a=9删除目录*/
printf(" 输入文件路径名");
scanf("%s",name);
rd(name); /*删除目录*/
break;
case 10: /*a=10显示文件*/
printf(" 输入文件路径名");
scanf("%s",name);
typefile(name); /*显示文件*/
break;
case 11: /*a=11改变文件属性*/
printf(" 输入文件路径名和文件属性(1-只读文件,3-只读系统文件,4-普通文件):");
scanf("%s%d",name,&attribute);
change(name,attribute);
}/* switch */
}/* while */
}
Process()
{
int num,j,block;
run=ready.head=ready.tail=block=-1;
pfree=0;
for(j=0;j<pn-1;j++)
pcbarea[j].next=j+1;
pcbarea[pn-1].next=-1;
printf("输入进程编号(避免编号的冲突,以负数输入结束,最多可以创建10个进程:\n");
scanf("%d",&num);
while(num>=0)
{
create(num);
scanf("%d",&num);
}
sheduling();
if(run!=-1)
{
printf("进程标识符 进程状态 寄存器内容:ax bx cx dx pc psw:\n");
printf("%10d%10d%15d%3d%3d%3d%3d%3d\n",pcbarea[run].name,
pcbarea[run].status,pcbarea[run].ax,pcbarea[run].bx,pcbarea[run].cx,pcbarea[run].dx,pcbarea[run].pc,
pcbarea[run].psw);
}
}
MangerMemory()
{
int i, a;
float xk;
char J;
free_table[0].address=10240;
free_table[0].length=102400;
free_table[0].flag=1;
for(i=1; i<m; i++)
free_table[i].flag=0;
for(i=0; i<n; i++)
used_table[i].flag=0;
while(1)
{
printf("选择功能项(0-退出,1-分配主存,2-回收主存,3-显示主存)\n");
printf("选择功项(0~3):");
scanf("%d",&a);
switch(a)
{
case 0:
return 0;
case 1:
printf("输入作业名J和作业所需长度xk :");
J = getchar();
J = getchar();
scanf("%f",&xk);
allocate(J, xk);
break;
case 2:
printf("输入要回收分区的作业名");
J = getchar();
J = getchar();
reclaim(J);
break;
case 3:
printf("输出空闲区表:\n起始地址 分区长度 标志\n");
for(i=0; i < m; i++)
printf("%5.0f%10.0%6d\n",free_table[i].address,free_table[i].length,free_table[i].flag);
printf(" 按任意键,输出已分配区表\n");
getchar();
printf("输出已分配区表:\n起始地址 分区长度 标志\n");
for(i=0; i<n; i++)
if(used_table[i].flag!=0)
printf("%8.0f%16.0f%8c\n",used_table[i].address, used_table[i].length, used_table[i].flag);
else
printf("%8.0f%16.0f%8d\n",used_table[i].address, used_table[i].length,used_table[i].flag);
break;
default:printf("没有该选项\n");
}/*case*/
}/*while*/
}
main()
{
int a;
while(1)
{
printf("\n0-结束操作\n");
printf("1-管理文件\n");
printf("2-进程管理\n");
printf("3-内存管理\n");
printf("4-设备分配\n");
scanf("%d",&a);
switch(a)
{
case 0: /*a=程序结束*/
return 0;
case 1:
MangerFile();
break;
case 2:
Process();
break;
case 3:
MangerMemory();
break;
}
}
}/*main()结束*/
/*
main()
{
int num,j,block;
run=ready.head=ready.tail=block=-1;
pfree=0;
for(j=0;j<n-1;j++)
pcbarea[j].next=j+1;
pcbarea[n-1].next=-1;
printf("输入进程编号(避免编号的冲突,以负数输入结束,最多可以创建10个进程:\n");
scanf("%d",&num);
while(num>=0)
{
create(num);
scanf("%d",&num);
}
sheduling();
if(run!=-1)
{
printf("进程标识符 进程状态 寄存器内容:ax bx cx dx pc psw:\n");
printf("%8d%10d%3d%3d%3d%3d%3d%3d\n",pcbarea[run].name,
pcbarea[run].status,pcbarea[run].ax,pcbarea[run].bx,pcbarea[run].cx,pcbarea[run].dx,pcbarea[run].pc,
pcbarea[run].psw);
}
}/ *main()* /*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -