int main() { struct mymsgbuf { long msgtype; char ctrlstring[BUF_SIZE]; }msgbuffer; int qid; int msglen; key_t msgkey; struct msqid_ds msq_attr; if((msgkey=ftok(PATH_NAME,PROJ_ID))==-1) { perror("ftok error!\n"); exit(1); } if((qid=msgget(msgkey,IPC_CREAT|0666))==-1) { perror("msgget error!\n"); exit(1); } getmsgattr(qid,msq_attr); msgbuffer.msgtype=2; strcpy(msgbuffer.ctrlstring,"Another message"); msglen=sizeof(struct mymsgbuf)-4; if(msgsnd(qid,&msgbuffer,msglen,0)==-1) { perror("msgget error\n"); exit(1); } getmsgattr(qid,msq_attr); msq_attr.msg_perm.uid=3; msq_attr.msg_perm.gid=2; if(msgctl(qid,IPC_SET,&msq_attr)==-1) { perror("msg set error\n"); exit(1); } getmsgattr(qid,msq_attr); if(msgctl(qid,IPC_RMID,NULL)==-1) { perror("delete msg error\n"); exit(1); } getmsgattr(qid,msq_attr); exit(0); }
int main() { //自定义消息缓冲区 struct mymsgbuf { long msgtype; char msgstring[BUF_SIZE]; }msgbuffer; int msgid; //消息队列标识符 int msglen; //消息长度 key_t msgkey; //消息队列关键字 struct msqid_ds msg_attr; //属性 //获取键值 if((msgkey = ftok(PATH_NAME,PROJ_ID)) == -1 ) { perror("ftok error!\n"); exit(1); } //获取消息队列标识符 if((msgid = msgget(msgkey,IPC_CREAT|0660)) == -1) { perror("msgget error!\n"); exit(1); } //输出消息队列的属性 getmsgattr(msgid,msg_attr); //发送一条消息到消息队列 msgbuffer.msgtype = 2; strcpy(msgbuffer.msgstring,"hello,world"); msglen = sizeof(struct mymsgbuf); if(msgsnd(msgid,&msgbuffer,msglen,0) == -1) { perror("msgsnd error!\n"); exit(1); } //输出消息队列属性 getmsgattr(msgid,msg_attr); //设置消息队列属性 msg_attr.msg_perm.uid = 3; msg_attr.msg_perm.gid = 2; if(msgctl(msgid,IPC_SET,&msg_attr) == -1) { perror("msg set error!\n"); exit(1); } //输出修改后的属性 getmsgattr(msgid,msg_attr); //从内核中删除消息队列 if(msgctl(msgid,IPC_RMID,NULL) == -1) { perror("delete msg error!\n"); exit(1); } //输出删除后的属性 getmsgattr(msgid,msg_attr); exit(0); }