优化struct PCB { int pid;//进程标识符 int rr;//已运行时间 int time;//进程要求运行时间 char sta;//进程的状态 struct PCB *next;//链接指针 }; struct PCB pcb1,pcb2,pcb3,pcb4,pcb5,*tail,*head,*rp;
时间: 2024-03-25 19:40:25 浏览: 20
可以使用数组来存储 `PCB` 结构体,同时使用循环来遍历数组,这样可以减少代码量,增加可读性。代码实现如下:
```
#define MAX_PROCESS_NUM 5 // 最大进程数
struct PCB {
int pid; // 进程标识符
int rr; // 已运行时间
int time; // 进程要求运行时间
char sta; // 进程的状态
struct PCB *next; // 链接指针
};
struct PCB pcb[MAX_PROCESS_NUM]; // 存储 PCB 的数组
// 初始化 PCB 数组
for (int i = 0; i < MAX_PROCESS_NUM; i++) {
pcb[i].pid = i + 1;
pcb[i].rr = 0;
pcb[i].time = 0;
pcb[i].sta = 'W';
pcb[i].next = NULL;
}
tail = &pcb[MAX_PROCESS_NUM - 1];
head = &pcb[0];
rp = head;
```
这样,我们就可以使用循环遍历 `pcb` 数组,而不是单独声明 `pcb1`、`pcb2`、`pcb3` 等变量,使得代码更加简洁易读。同时,如果需要增加 `PCB` 结构体的数量,只需要修改 `MAX_PROCESS_NUM` 宏定义即可,无需修改大量的变量名和代码。
相关问题
linux如何用C语言创建typedef struct node { char name[10]; /*进程标识符*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ int count; /*计数器*/ char state; /*进程的状态*/ struct node *next; /*链指针*/ }PCB;的进程
要用C语言创建该结构体的进程,需要使用系统调用来完成。具体来说,需要用到以下几个系统调用:
1. fork():用于创建子进程。在调用fork()时,父进程会复制自身的代码段、数据段、堆栈等内容,创建出一个新的子进程,子进程的PCB结构体与父进程相同。
2. exec():用于在当前进程中执行一个新的程序。可以通过调用exec()来替换当前进程的代码段、数据段等内容,从而实现新的程序的执行。
3. getpid():用于获取当前进程的PID。
4. wait():用于等待子进程的结束,并获取子进程的退出状态。
下面是一个简单的示例程序,用于创建一个进程并打印其PID:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
typedef struct node {
char name[10]; /*进程标识符*/
int round; /*进程时间轮转时间片*/
int cputime; /*进程占用CPU时间*/
int needtime; /*进程到完成还要的时间*/
int count; /*计数器*/
char state; /*进程的状态*/
struct node *next; /*链指针*/
}PCB;
int main() {
PCB process;
pid_t pid;
strcpy(process.name, "test");
process.round = 10;
process.cputime = 0;
process.needtime = 20;
process.count = 0;
process.state = 'R';
process.next = NULL;
pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) {
/* 子进程 */
printf("Child process PID = %d\n", getpid());
/* 在这里执行进程的代码 */
exit(EXIT_SUCCESS);
} else {
/* 父进程 */
printf("Parent process PID = %d\n", getpid());
/* 等待子进程结束 */
wait(NULL);
printf("Child process exited\n");
}
return 0;
}
```
在上面的程序中,首先创建了一个PCB结构体,然后调用fork()函数创建子进程。在子进程中,调用getpid()函数获取当前进程的PID,并在屏幕上打印出来。在父进程中,调用wait()函数等待子进程结束,并打印出子进程已经退出的信息。你可以在子进程的代码中编写具体的进程逻辑。
typedef struct school { int num; //学校编号 char name[20]; //学校名称 int sc
typedef struct school {
int num; // 学校编号
char name[20]; // 学校名称
int score; // 学校分数
} School;
在这段代码中,我们使用了typedef关键字来定义一个名为School的结构体类型。结构体中有三个成员变量。第一个成员变量num表示学校编号,是一个整数类型。第二个成员变量name表示学校名称,是一个字符数组类型,长度为20。第三个成员变量score表示学校分数,也是一个整数类型。
通过typedef关键字的使用,我们可以直接使用School来声明结构体变量,而不需要再使用struct关键字。例如,我们可以使用以下代码声明一个School类型的结构体变量:
School mySchool;
接下来,我们可以对mySchool的成员变量进行赋值和访问操作。例如,我们可以使用以下代码给mySchool的成员变量赋值:
mySchool.num = 1;
strcpy(mySchool.name, "ABC学校");
mySchool.score = 90;
我们也可以使用以下代码访问mySchool的成员变量并打印出来:
printf("学校编号:%d\n", mySchool.num);
printf("学校名称:%s\n", mySchool.name);
printf("学校分数:%d\n", mySchool.score);
通过typedef关键字的使用,我们可以简化对结构体类型的声明和使用,使代码更加清晰和易读。