进程管理实验
来源:互联网 发布:阿里云 域名解析到网址 编辑:程序博客网 时间:2024/04/30 18:11
<p>用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。</p><p></p><p>#define _CRT_SECURE_NO_DEPRECATE</p>#include <conio.h>#include <stdio.h>#include <stdlib.h>struct PCB_type{int pid;int priority;int cputime;int state;};int shumu = 0;int pid_1;struct PCB_type neicun[20];struct PCB_type hc[10];int max = 0;int number = 0;void create();void run();void huanchu();void kill();/* 创建新进程 */void create(){if (shumu >= 20){printf("neicun is full\n");}else{shumu++;printf("请输入新进程的程序名\n");scanf("%d", &neicun[shumu - 1].pid);printf("请输入新进程的优先级\n");scanf("%d", &neicun[shumu - 1].priority);printf("请输入新进程的运行时间\n");scanf("%d", &neicun[shumu - 1].cputime);printf("创建进程时令其状态为就绪\n");neicun[shumu - 1].state = 2;printf("\n创建进程成功!\n");}}/* 查看当前运行进程 */void run(){int max = 0;for (int i = 0;i<shumu;i++){if ((neicun[i].state == 1) && (neicun[i].priority >= neicun[max].priority))max = i;}neicun[max].state = 3;printf("当前运行进程程序名:\n%d", neicun[max].pid);printf("\n该进程的优先级:\n%d", neicun[max].priority);printf("\n该进程的运行时间:\n%d", neicun[max].cputime);printf("\n该进程的状态:\n%d", neicun[max].state);}/* 换出 */void huanchu(){int k;printf("请输入要换出程序的程序名:");scanf("%d", &k);for (int j = 0;j<shumu;j++){if (neicun[j].state == 1){hc[number].pid = neicun[j].pid;hc[number].state = neicun[j].state;hc[number].priority = neicun[j].priority;hc[number].cputime = neicun[j].cputime;number++;neicun[j].pid = 0;neicun[j].state = 0;neicun[j].priority = 0;neicun[j].cputime = 0;pid_1++;}else printf("进程%d无法换出的pid:%d\n", j,neicun[j].pid);if (number != 0){for (int i = 0;i < number;i++){printf("当前运行进程程序名:\n%d", hc[i].pid);printf("\n该进程的优先级:\n%d", hc[i].priority);printf("\n该进程的运行时间:\n%d", hc[i].cputime);printf("\n该进程的状态:\n%d", hc[i].state);}}}PCB_type temp = neicun[0];for (k = 0;k <= shumu;k++){if (neicun[k].priority>temp.priority)temp = neicun[k];}neicun[k].state = 1;}/* 杀死进程 */void kill(){neicun[max].pid = 0;neicun[max].priority = 0;neicun[max].cputime = 0;neicun[max].state = 0;if (max == (shumu - 1))shumu--;else {for (int j = max + 1;j<shumu;j++){neicun[j - 1].pid = neicun[j].pid;neicun[j - 1].priority = neicun[j].priority;neicun[j - 1].cputime = neicun[j].cputime;neicun[j - 1].state = neicun[j].state;}shumu--;}max = 0;run();}int main(){int n, a;n = 1;while (n == 1){system("cls");printf("\n**********************************************");printf("\n* 进程演示系统 *");printf("\n**********************************************");printf("\n 1.创建新的进程 2.查看运行进程");printf("\n 3.换出某个进程 4.杀死运行进程");printf("\n 5.退出系统 ");printf("\n**********************************************");printf("\n请选择(1~5):");scanf("%d", &a);switch (a){case 1:create();printf("\npress anykey to go on~");//getch();system("pause");break;case 2:run();printf("\npress anykey to go on~");system("pause");//getch();break;case 3:huanchu();printf("\npress anykey to go on~");system("pause");//getch();break;case 4:kill();printf("\npress anykey to go on~");//getch();system("pause");break;case 5:exit(0);default:n = 0;break;}}}很久不用VS,中途出现了几个小问题
1.warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
这种警告是因为VS的C函数库有更新的安全版本,
如果源码只打算用VS编译可以改为使用安全版本
比如scanf改为scanf_s
如果需要使用其他编译器编译,就无视吧
如果你getch() 是为了暂停程序以便观察结果,并且你的源码并不打算用其他编译器编译
可以使用system("pause");替换getch();效果就是暂停程序并显示 "请按任意键继续. . ."
2.error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
原因是Visual C++ 2012 使用了更加安全的 run-time library routines 。新的Security CRT functions(就是那些带有“_s”后缀的函数),请参见:
《CRT函数的安全增强的版本》
下面给出这个问题的解决方案:
方法一:将原来的旧函数替换成新的 Security CRT functions。
方法二:用以下方法屏蔽这个警告:
1. 在预编译头文件stdafx.h里(注意:一定要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_NO_DEPRECATE
2. 或声明 #param warning(disable:4996)
3. 更改预处理定义:
项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加:
_CRT_SECURE_NO_DEPRECATE
方法三:方法二没有使用更加安全的 CRT 函数,显然不是一个值得推荐的好方法,但我们又不想一个一个地改函数名,这里还有一个更简便的方法:
在预编译头文件 stdafx.h 里(同样要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
在链接的时候便会自动将旧函数替换成 Security CRT functions 。
注意:这个方法虽然使用了新的函数,但是不能消除警告(原因见红字),你还得同时使用方法二(-_-)。即实际应在预编译头文件 stdafx.h 里加入下面两句:
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
- 操作系统进程管理实验
- 实验二、进程管理
- 进程管理实验
- 操作系统实验一进程管理
- 操作系统实验二 进程管理
- 操作系统实验之进程管理
- 操作系统进程管理实验(FC5下)
- Linux实验心得——进程管理
- 哈工大操作系统实验3—进程管理
- 操作系统实验一之进程管理源代码
- 操作系统——实验一.进程管理
- 操作系统实验一(进程管理)
- 操作系统实验一(进程管理)
- 操作系统实验--C语言模拟进程管理
- 实验二 Linux基本命令 进程管理
- 进程管理之(一) 进程的创建实验
- 进程管理之(二)进程的控制实验
- Linux父子进程对键盘IO的管理 实验一则
- PHP生成唯一字符串的方法,产生唯一码的方法分析
- DescriptionResourcePathLocationType Cannot change version of project facet Dynamic Web Module to
- CodeForces 132C Logo Turtle 四维DP 递推
- Voucher Key 相关SELinux
- iOS简单直播实现(二:推流)
- 进程管理实验
- [codeforces724e]Goods transportation 解题报告
- 三子棋的C语言实现
- 【JZOJ4807】破解
- 集合入门介绍第四章——Map集合
- Tomcat项目跨域问题(Tomcat7)
- java排序
- Android Studio下导入百度地图Demo
- iOS简单直播实现(三:IJKMediaFramework拉流)