1 #include<stdio.h> 2 #include<string.h> 3 #include<sys/types.h> 4 #include<sys/ipc.h> 5 #include<sys/msg.h> 6 int main() 7 { 8 int ret = -1; 9 key_t key; 10 char *msgpath = "./ipc/"; 11 int msgFlags, msg_id; 12 13 int msg_sflags, msg_rflags; 14 struct msgmbuf{ 15 long int mtype; 16 char mtext[10]; 17 }; 18 19 struct msqid_ds msg_info; 20 struct msgmbuf msg_mbuf; 21 22 key = ftok(msgpath,'b'); 23 if(key!=-1) 24 { 25 printf("ftok 成功!key = %d\n", key); 26 } 27 else 28 { 29 printf("ftok 失败!key = %d\n", key); 30 } 31 32 msgFlags = IPC_CREAT|IPC_EXCL; 33 msg_id = msgget(key,msgFlags|0666); 34 if(-1 != msg_id) 35 { 36 printf("消息建立成功,msgId = %d\n", msg_id); 37 } 38 else 39 { 40 printf("msgget 失败, msgId = %d\n", msg_id); 41 return 0; 42 } 43 44 45 msg_sflags = IPC_NOWAIT; 46 msg_mbuf.mtype = 10; 47 memcpy(msg_mbuf.mtext,"1", sizeof("1")); 48 printf("msgLen = %d\n", sizeof("1")); 49 ret = msgsnd(msg_id, &msg_mbuf, sizeof(msg_mbuf.mtext), msg_sflags); 50 if(-1 == ret) 51 { 52 printf("消息发送失败\n"); 53 } 54 55 msg_rflags = IPC_NOWAIT|MSG_NOERROR; 56 57 ret = msgrcv(msg_id, &msg_mbuf,10,10,msg_rflags); 58 if(-1 == ret) 59 { 60 printf("消息接收失败\n"); 61 } 62 else 63 { 64 printf("消息接收成功\n"); 65 } 66 67 68 printf("--1--\n"); 69 70 ret = msgctl(msg_id, IPC_RMID, NULL); 71 if(-1 == ret) 72 { 73 printf("删除消息失败\n"); 74 return 0; 75 } 76 else 77 { 78 printf("删除消息成功\n"); 79 } 80 81 return 0; 82 }