/* enter.c--place an object into queue */ #include "q.h" int enter(char *objname, int priority) { int len, s_qid; stru

动态 未结 0 124
小小草
小小草 LV1 2023年9月23日 23:40 发表
为了能向服务器进程发送控制消息,我们需要修改enter函数,使其支持接收控制消息并进行相应的处理。 首先,我们需要添加一个参数来表示控制消息的队列。这个队列将用于发送控制消息。然后,在发送普通消息之前,我们需要检查是否有控制消息需要发送。如果有,我们需要创建一个新的q_entry结构体来表示控制消息,并将其发送到队列中。 下面是修改后的enter函数的代码: ```c int enter(char *objname, int priority, int control_qid) { int len, s_qid; struct q_entry s_entry; //structure to hold message //validate name length, priority level if ((len=strlen(objname))>MAXOBN) { warn("name too long"); return(-1); } if (priority>MAXPRIOR||priority<0) { warn("invalid priority level"); return(-1); } //initialize message queue as necessary if ((s_qid=init_queue())==-1) return(-1); //check for control message if (control_qid != -1) { //create control message entry struct q_entry c_entry; c_entry.mtype = (long)CONTROL_MSG_TYPE; strncpy(c_entry.mtext, objname, MAXOBN); //send control message if (msgsnd(control_qid, &c_entry, len, 0) == -1) { perror("msgsnd failed"); return(-1); } } //initialize s_entry s_entry.mtype=(long)priority; strncpy(s_entry.mtext, objname, MAXOBN); //send message, waiting if necessary if (msgsnd(s_qid, &s_entry, len, 0)==-1) { perror("msgsnd failed"); return(-1); } else { return(0); } } ``` 注意,我们添加了一个名为control_qid的新参数,并在函数中使用它来发送控制消息。如果control_qid为-1,则表示没有控制消息需要发送。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复