为了从 SysV 队列的 ID 中获取消息的数量,我在用户空间中使用了函数 msgctl() 没有任何问题(如下所示):
main(int argc, char *argv[])
{
int qid;
struct msqid_ds qstatus;
qid=(int)atoi(argv[1]);
if(msgctl(qid,IPC_STAT,&qstatus)<0){
perror("msgctl failed");
exit(1);
}
printf("There are %d messages for queue with ID %d\n",qstatus.msg_qnum,qid);
}
现在,我需要在内核空间中做同样的事情,但是下面的代码不起作用(函数返回 -1):
int get_num_from_id(int qid)
{
struct msqid_ds qstatus;
sys_msgctl(qid,IPC_STAT,&qstatus);
return qstatus.msg_qnum;
}
有人可以帮助我理解我做错了什么......