头文件global.h
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
#define JOBINFO "jid\tpid\tdefpri\tcurpri\twaittime\tcreatetime\truntime\tjobstate"
#ifndef DEBUG
#define DEBUG
#endif
enum jobstate{
RUNNING,READY,DONE,NONNORMALEXIT
};
/*命令名称*/
enum cmdtype{
DEQ,ENQ,STAT
};
/*当前的作业*/
struct jobinfo{
int jid; /*作业id*/
pid_t pid; /*进程id*/
char **arglist; /*命令参数*/
int defpri; /*默认优先级*/
int curpri; /*当前优先级*/
int ownerid; /*作业所有者id*/
int waittime; /*作业在等待队列里边等待时间*/
time_t createtime; /*作业创建的时间*/
int runtime; /*作业运行时间*/
enum jobstate state; /*作业状态*/
};
struct waitqueue{
struct jobinfo *waitjob;
struct waitqueue *next;
};
void printjob(struct jobinfo *now,int flag);
#endif
文件:
#include"global.h"
/*打印一项作业*/
void printjob(struct jobinfo *now,int flag)
{
if(now == NULL)
return;
if(!flag){
printf(JOBINFO);
printf("\n");
}
printf("%d\t%d\t%d\t%d\t%d\t%s\t%d",now->jid,now->pid,now->defpri,
now->curpri,now->waittime,ctime(&now->createtime),now->runtime);
switch(now->state){
case RUNNING :
printf("\trunning\n");
break;
case READY :
printf("\tready\n");
break;
case DONE :
printf("\tdone\n");
break;
default :
assert(now->state == NONNORMALEXIT);
printf("\tnonomalexit\n");
}
}
int main()
{
struct waitqueue *queue;
int i;
char *s;
char **arglist;
arglist = (char **)malloc(sizeof(char *) * 2);
printf("ok\n");
s = (char *)malloc(sizeof(char)*10);
strcpy(s,"hello");
arglist[0] = s;
arglist[1] = NULL;
queue = (struct waitqueue*)malloc(sizeof(struct waitqueue));
queue->next = NULL;
queue->waitjob = (struct jobinfo*)malloc(sizeof(struct jobinfo*));
queue->waitjob->jid = 1;
queue->waitjob->defpri = 0;
queue->waitjob->curpri = 0;
queue->waitjob->waittime= 0;
queue->waitjob->createtime = time(NULL);
queue->waitjob->runtime = 0;
queue->waitjob->state = DEQ;
queue->waitjob->arglist = arglist;
for(i = 0;i < PRIORITY;i++)
waitmaxtrix[i] = NULL;
joinqueue(queue); /*加入队列,没有提示错误*/
printf("%d\n",waitmaxtrix[1] == NULL ? 1 : 0);
printf("%d\t%s\n",waitmaxtrix[0]->waitjob->jid,waitmaxtrix[0]->waitjob->arglist[0]);
printjob(queue->waitjob,0);
}