#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <errno.h> #include <string.h> typedef struct { long int nType; char szText[256]; }MSG; int main(int argc, char** argv) { key_t IKey1; int n,nMsgId; MSG msg; if((IKey1 = ftok("/etc/profile",1)) == -1) { perror("ftok"); exit(1); } if((nMsgId = msgget(IKey1,0)) == -1) { perror("msgget"); exit(2); } printf("KeyID=%x\n",IKey1); printf("MsgID=%d\n",nMsgId); memset(&msg,0x00,sizeof(MSG)); if((n = msgrcv(nMsgId,(const void*)&msg,sizeof(msg.szText),2L,0))<0) { perror("msgrcv"); } else { printf("msgrcv return length=[%d] text=[%s]\n",n,msg.szText); } return 0; }
运行结果, 消息数变为1, 长度变为6
[root@elm64 ~]# ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages 0x010088c2 0 root 666 12 2 [root@elm64 ~]# ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages 0x010088c2 0 root 666 6 1 [root@elm64 ~]#