消息队列的系统限制
作者:冯老师,华清远见嵌入式学院讲师。
消息队列是System V的IPC对象的一种,用于进程间通信,会受到系统的限制,本文主要描述了三个限制。第一:议个消息的最大长度;第二:消息队列的最大容量;第三:最大消息队列数。
一、 一个消息的最大长度
示例程序如下:
#include
#include
#include
#include
#include
#include
#define N 8192
typedef struct
{
long mtype;
char mtext[N];
}MSG;
int main()
{
key_t key;
int msgid;
MSG buf;
if ((key = ftok(".", 5)) == -1)
{
perror("ftok");
exit(-1);
}
if ((msgid = msgget(key, 0666 | IPC_CREAT)) == -1)
{
perror("msgget");
exit(-1);
}
memset(&buf, 'a', sizeof(buf));
buf.mtype = 100;
if (-1 == msgsnd(msgid, &buf, N, 0))
{
perror("msgsnd 1");
exit(-1);
}
printf("**\n");
return 0;
}
程序执行结果如下:
linux@ubuntu:~/process/fifth$ ./a.out
msgsnd 1: Invalid argument
当N为8192时,可以成功执行,打印出’**”,当改成N为8193时,就出现了上面的