在消息队列中,例如函数msgsnd(int msqid, const void* msgp, size_t msgsz, int msgflg);
这个函数调用的时候,msgsz最大只能为8192,也就是2的16次方。可以看出这里的msgsz大小限制在一个short型。超过这个大小就会出错——invalid argument。并不是其他人所说的只要msgsz是mtext的大小就不会出错,如果sizeof(mtype)+sizeof(mtext)<=8192时,msgsz为sizeof(mtype)+sizeof(mtext)大小也没有关系。
当然msgsz这个大小也不是不可以改变,如果要变,就去内核代码里面关于实现消息队列的程序中把这个限制改变一下就好。(我没试过,应该可以),一般是在内核源码中的ipc文件夹中会有mqueue.c这个c语言程序文件,里面会定义DFLT_MSGSIZEMAX为8192,这应该就是为什么msgsz最大为8192的原因,如果要改,可以改掉,然后重新编译内核。