榪欐椂錛岄棶棰樺嚭鐜頒簡錛屾瘡嬈¤皟鐢╩sgrcv鍑芥暟鐨勬椂鍊欙紝瀹冩繪槸絎竴嬈¤皟鐢ㄦ垚鍔燂紝鑰岀浜屾榪斿洖閿欒錛屽療鐪媏rrno=22錛屾墦鍗板嚭鏉ユ槸invalid argument錛屾棤鏁堝弬鏁般?br> 鍑畠鐨勮鏄庯紝鍙互鐪嬪嚭鍙兘鏄垜璋冪敤鍑芥暟鐨勬椂鍊欏弬鏁伴敊璇紝浣嗕負浠涔堢涓嬈¤兘璋冪敤鎴愬姛鍛紵
媯鏌ヤ簡涓涓嬶紝娌$湅鍑洪棶棰樸傜劧鍚巊oogle涔嬶紝鍙戠幇璁稿浜哄拰鎴戝嚭鐜頒簡鍚屾牱鐨勯棶棰橈紝浣嗘病鏈変漢緇欏嚭瑙g瓟銆?br> 鑷繁榧撴崳浜嗗ソ涔咃紝榪樻槸娌℃悶瀹氥?br> 鐒跺悗man 2 msgsnd錛屼竴涓嬪崍涓嶇煡鎵撲簡澶氬皯閬嶄簡錛岃繖涓嬈′粠澶村埌灝句竴涓瓧涓涓瓧鐨勮浜嗕笅鍘匯?br> 緇堜簬鍙戠幇闂浜嗐?br>
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
man鏂囨。閲屾湁涓鍙ヨ瘽錛?span style="color: red;">The mtext field is an array (or other structure) whose size is specified by msgsz
涓鐩存病璁ょ湡鍘葷湅錛屾兂褰撶劧鐨勪互涓簃sgsz灝辨槸msgp鐨勫ぇ灝忎簡錛屽師鏉ヤ漢瀹朵笉鏄紝鑷繁鑷綔澶氭儏浜嗐傘傘?br>
榪欎箞涓涓皬闂鑺變簡鎴戝崐涓笅鍗堬紝浣嗙幇鍦ㄥ彂鐜版繪瘮浠ュ悗鍑洪敊瑕佸ソ澶氫簡~
鍐欏嚭鏉ワ紝緇欓偅浜涚涓嬈′嬌鐢ㄧ殑鏈嬪弸浠湅~~
鎶婁慨鏀瑰悗鐨勪唬鐮佽創鍑烘潵錛?br>
struct s_msg{
long type;
char mtext[256];
};
//snd
int main()
{
int mid;
if((mid=msgget(4446,IPC_CREAT|0666))==-1)
perr_exit("msgget:");
char buf[BUFSIZE];
memset(buf,'\0',BUFSIZE);
s_msg mymsg;
while(fgets(buf,BUFSIZE,stdin)!=NULL){
if(strlen(buf)<=2)continue;
buf[strlen(buf)]='\0';
if(sscanf(buf,"%d%s",&mymsg.type,mymsg.mtext)!=2)
perr_exit("Invalid input:");
if(msgsnd(mid,&mymsg,256,IPC_NOWAIT)) //msgsiz 涓簊izeof(mtext[]),鑰岄潪sizeof(s_msg)
perr_exit("msgsnd:");
memset(buf,'\0',BUFSIZE);
}
return 0;
}
//rcv
int main(int argc,char **argv)
{
int mid;
if((mid=msgget(4446,IPC_CREAT|0666))==-1)
perr_exit("msgget:");
s_msg mymsg;
while(1)
{
if(msgrcv(mid,&mymsg,256,0,MSG_NOERROR)==-1) //灝辨槸榪欓噷鍑洪敊鐨勶紝璁頒綇浣犱簡
perr_exit("msgrcv");
if(mymsg.type!=4446)
cout<<mymsg.type<<" :"<<mymsg.mtext<<endl;
else {
cout<<"4446 quit\n";
break;
}
memset(&mymsg,0,sizeof(mymsg));
}
return 0;
}

]]>