#include "public.h"
void msg_show_attr(int msg_id,struct msqid_ds msg_info)
{int ret=-1;
sleep(1); ret=msgctl(msg_id,IPC_STAT,&msg_info);//获取消息 if (-1==ret) { printf("获得消息信息失败\n"); return ; } printf("\n"); printf("现在队列中字节数:%d\n",msg_info.msg_cbytes); printf("队列中消息数:%d\n",msg_info.msg_qnum); printf("队列照哦给你最大字节数:%d\n",msg_info.msg_qbytes); printf("最后发送消息的进程pid:%d\n",msg_info.msg_lspid); printf("最后接受消息的进程pid:%d\n",msg_info.msg_lrpid); printf("最后发送消息的时间:%s\n",ctime(&(msg_info.msg_stime))); printf("最后接受消息的时间:%s\n",ctime(&(msg_info.msg_rtime))); printf("最后变化时间:%s\n",ctime(&(msg_info.msg_ctime))); printf("消息UID是:%d\n",msg_info.msg_perm.uid); printf("消息GID是:%d\n",msg_info.msg_perm.gid);}int main()
{ int ret=-1; int msg_flags,msg_id; key_t key; struct msgmbuf{ int mtypes; char mtext[10]; }; struct msqid_ds msg_info; struct msgmbuf msg_mbuf;int msg_sflags,msg_rflags;
char *msgpath="/ipc/msg/"; key=ftok(msgpath,'b'); if (key!=-1) { printf("成功创建KEY\n"); } else { printf("建立KEY失败\n"); } msg_flags=IPC_CREAT|IPC_EXCL; msg_id=msgget(key,msg_flags|0x0666); if (-1==msg_id) { printf("消息建立失败\n"); return 0; } msg_show_attr(msg_id,msg_info); msg_sflags=IPC_NOWAIT; msg_mbuf.mtypes=10; memcpy(msg_mbuf.mtext,"测试消息",sizeof("测试消息"));//复制字符串 ret=msgsnd(msg_id,&msg_mbuf,sizeof("测试消息"),msg_sflags); if (-1==ret) { printf("发送消息失败\n"); } msg_show_attr(msg_id,msg_info); msg_rflags=IPC_NOWAIT|MSG_NOERROR; ret=msgrcv(msg_id,&msg_mbuf,10,10,msg_rflags); if (-1==ret) { printf("接受消息失败\n"); } else { printf("接受消息成功,长度:%d\n",ret); } msg_show_attr(msg_id,msg_info); msg_info.msg_perm.uid=8; msg_info.msg_perm.gid=8; msg_info.msg_qbytes=12345; ret=msgctl(msg_id,IPC_SET,&msg_info);//设置消息属性 if (-1==ret) { printf("设置消息属性失败\n"); return 0; } msg_show_attr(msg_id,msg_info); ret=msgctl(msg_id,IPC_RMID,NULL); if (-1==ret) { printf("删除消息失败\n"); return 0; }return 0;
}