控制消息队列权限
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <errno.h>#include <string.h>#include <sys/shm.h>typedef struct{long int nType;char szText[256];}MSG;int main(int argc, char** argv) { key_t IKey1; int n,nMsgId; MSG msg; struct msqid_ds qds; if((IKey1 = ftok("/etc/profile",1)) == -1) { perror("ftok"); exit(1); } if((nMsgId = msgget(IKey1,0)) == -1) { perror("msgget"); exit(2); } memset(&qds,0x00,sizeof(struct msqid_ds)); if(msgctl(nMsgId,IPC_STAT,&qds)); { //perror("msgctl IPC_STAT"); printf("error happen\n"); exit(3); } printf("msg_perm.mode=%d\n",qds.msg_perm.mode); qds.msg_perm.mode &=(~0222); if(msgctl(nMsgId,IPC_SET,&qds)<0) { perror("msgctl IPC_SET"); exit(3); } memset(&msg,0x00,sizeof(MSG)); msg.nType=2; memcpy(msg.szText,"12345",5); if((n = msgsnd(nMsgId,(const void*)&msg,5,0))<0) { perror("msgsnd"); } if(msgctl(nMsgId,IPC_RMID,NULL)<0){ perror("msgctl IPC_RMID"); exit(5); } return 0;}