在消息隊(duì)列中,例如函數(shù)msgsnd(int msqid, const void* msgp, size_t msgsz, int msgflg);
這個(gè)函數(shù)調(diào)用的時(shí)候,msgsz最大只能為8192,也就是2的16次方。可以看出這里的msgsz大小限制在一個(gè)short型。超過這個(gè)大小就會(huì)出錯(cuò)——invalid argument。并不是其他人所說的只要msgsz是mtext的大小就不會(huì)出錯(cuò),如果sizeof(mtype)+sizeof(mtext)<=8192時(shí),msgsz為sizeof(mtype)+sizeof(mtext)大小也沒有關(guān)系。
當(dāng)然msgsz這個(gè)大小也不是不可以改變,如果要變,就去內(nèi)核代碼里面關(guān)于實(shí)現(xiàn)消息隊(duì)列的程序中把這個(gè)限制改變一下就好。(我沒試過,應(yīng)該可以),一般是在內(nèi)核源碼中的ipc文件夾中會(huì)有mqueue.c這個(gè)c語言程序文件,里面會(huì)定義DFLT_MSGSIZEMAX為8192,這應(yīng)該就是為什么msgsz最大為8192的原因,如果要改,可以改掉,然后重新編譯內(nèi)核。