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

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

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

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

  在Linux 2.6.18下的执行结果为:
  msg_qbytes:65536
  msg_qnum:2
  msg_cbytes:26
  关于消息队列中允许存放最大的字节数可以通过IPC_SET命令进行修改,该修改只能针对本消息队列生效。如下测试代码:
int main(int argc, char **argv)
{
key_t key;
key = CreateKey(PATH_NAME);
int msgID;
if ((msgID = msgget(key, IPC_CREAT | 0666)) < 0)
{
cout<<"open message queue failed...";
cout<<strerror(errno)<<endl;
return -1;
}
msqid_ds msgInfo;
msgctl(msgID, IPC_STAT, &msgInfo);
cout<<"msg_qbytes:"<<msgInfo.msg_qbytes<<endl;
cout<<"msg_qnum:"<<msgInfo.msg_qnum<<endl;
cout<<"msg_cbytes:"<<msgInfo.msg_cbytes<<endl;
msgInfo.msg_qbytes = 6553600;
if (msgctl(msgID, IPC_SET, &msgInfo) < 0)
{
cout<<"set message queue failed...";
cout<<strerror(errno)<<endl;
return -1;
}
msgctl(msgID, IPC_STAT, &msgInfo);
cout<<"msg_qbytes:"<<msgInfo.msg_qbytes<<endl;
cout<<"msg_qnum:"<<msgInfo.msg_qnum<<endl;
cout<<"msg_cbytes:"<<msgInfo.msg_cbytes<<endl;
return 0;
}
  在Linux 2.6.18下的执行结果为:
  msg_qbytes:65536
  msg_qnum:0
  msg_cbytes:0
  msg_qbytes:6553600
  msg_qnum:0
  msg_cbytes:0
  4 System V消息队列的内核限制
  对System V IPC,系统往往会存在一些限制,对于消息队列,在Linux2.6.18中,系统内核存在以下限制:
  [root@idcserver program]# sysctl -a |grep msg
  kernel.msgmnb = 65536 //一个消息队列上允许的最大字节数
  kernel.msgmni = 16 //系统范围内允许存在的最大消息队列数
  kernel.msgmax = 65536     //每个消息的最大字节数
  对于System V消息队列一般内核还有一个限制:系统范围内的最大消息数,在Linux下这个限制由msgmnb*msgmni决定。
  上面已经说过可以通过IPC_SET来设置使用中的消息队列的最大字节数。但是要在系统范围内对内核限制进行修改,在Linux下面可以通过修改/etc/sysctl.conf内核参数配置文件,然后配合sysctl命令来对内核参数进行设置。例如下面示例:
  [root@idcserver program]#echo "kernel.msgmnb = 6553600" >>/etc/sysctl.conf
  [root@idcserver program]#echo "kernel.msgmni = 100" >>/etc/sysctl.conf
  [root@idcserver program]#echo "kernel.msgmax = 6553600" >>/etc/sysctl.conf
  [root@idcserver program]#sysctl -p
  [root@idcserver program]# sysctl -a |grep msg
  kernel.msgmnb = 6553600
  kernel.msgmni = 100
  kernel.msgmax = 6553600
44/4<1234
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号