Linux进程通信之System V消息队列

发表于:2014-7-01 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:anonymalias    来源:51Testing软件测试网采编

  System V消息队列是Open Group定义的XSI,不属于POSIX标准。System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的系统内核中,后来商用UNIX系统基本都加入了System V IPC的功能。
  System V消息队列相对于POSIX消息队列的区别主要是:
  POSIX消息队列的读操作总是返回消息队列中优先级最高的最早消息,而对于System V消息队列可以返回任意指定优先级(通过消息类型)的消息。
  当向一个空消息队列中写入一个消息时,POSIX消息队列允许产生一个信号或启动一个线程,System V消息队列不提供类似的机制。
  系统内核都会为每一个System V消息队列维护一个信息结构,在Linux 2.6.18中的定义如下:
<bits/msq.h>
struct msqid_ds
{
struct ipc_perm msg_perm;        /*IPC对象的属性信息和访问权限 */
__time_t msg_stime;              /* time of last msgsnd command */
__time_t msg_rtime;              /* time of last msgrcv command */
__time_t msg_ctime;              /* time of last change */
unsigned long int __msg_cbytes;  /* 当前队列中消息的字节数 */
msgqnum_t msg_qnum;              /* 当前队列中消息的个数 */
msglen_t msg_qbytes;             /* 队列允许存放的最大字节数 */
__pid_t msg_lspid;               /* pid of last msgsnd() */
__pid_t msg_lrpid;               /* pid of last msgrcv() */
//下面是保留字段
#if __WORDSIZE == 32
unsigned long int __unused1;
unsigned long int __unused2;
unsigned long int __unused3;
#endif
unsigned long int __unused4;
unsigned long int __unused5;
};
  消息队列的结构可能的设计如下:
  1 System V消息队列的创建和打开
  System V消息队列的创建和使用会使用下面的函数接口:
  #include <sys/msg.h>
  int msgget(key_t key, int oflg);
  //成功返回非负消息队列描述符,失败返回-1
41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号