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