msgrcv的第三个参数不对,应该是sizeof(msg)-sizeof(long),也就是不包括msgtype部分的数据的长度。msgsnd的时候也是一样。不然发和收的时候都会多出sizeof(long)这么多个字节来,产生溢出,导致问题。