linux消息队列的控制
2014-08-27 16:18
369 查看
消息队列创建成功后,内核创建了消息队列结构的同时,还创建了消息队列的控制结构。msgqid_ds,该结构制定了消息队列的权限信息,发送接收消息的进程,时间戳等信息。
提供了专门的函数控制这个结构,msgctl;
现在创建一个案例:获取一个刚刚建立的队列的读写权限,并将读写权限置为对所有用户只读,最后删除队列消息。
首先以IPC_STAT为参数调用msgctl获取消息队列的权限信息,然后调用IPC_SET将所有的用户的写权限屏蔽,屏蔽后调用msgsnd向队列发送消息,看看是否已经修改为只读了
最后以IPC_RMID为参数调用msgctl将队列删除。
提供了专门的函数控制这个结构,msgctl;
现在创建一个案例:获取一个刚刚建立的队列的读写权限,并将读写权限置为对所有用户只读,最后删除队列消息。
首先以IPC_STAT为参数调用msgctl获取消息队列的权限信息,然后调用IPC_SET将所有的用户的写权限屏蔽,屏蔽后调用msgsnd向队列发送消息,看看是否已经修改为只读了
最后以IPC_RMID为参数调用msgctl将队列删除。
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> typedef struct { long int nType; char szText[256]; }MSG; int main() { key_t lKey; int n,nMsgId; MSG msg; struct msqid_ds qds;//消息队列控制结构变量 if((lKey = ftok("/etc/profile",1)) == -1)//这个已经根据这个键值创建过一次了 { perror("ftok"); exit(1); } if((nMsgId = msgget(lKey,0)) == -1) { perror("ftok"); exit(2); } memset(&qds,0x00,sizeof(struct msqid_ds)); if(msgctl(nMsgId,IPC_STAT,&qds) < 0)//设置消息队列的权限 { perror("msgctl IPC_STAT"); 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(4); } memset(&msg,0x00,sizeof(MSG)); msg.nType = 2; memcpy(msg.szText,"12345",5); if(msgsnd(nMsgId,(void *)&msg,5,0) < 0)//发送消息 { perror("msgsnd"); } if(msgctl(nMsgId,IPC_RMID,NULL) < 0)//删除消息队列 { perror("msgctl IPC_RMID"); exit(5); } return 0; }
相关文章推荐
- Linux消息队列编程
- Linux进程间通信: 消息队列
- Linux进程间通信: 消息队列
- Linux信号量 共享内存和消息队列
- linux 下内核中消息队列实现
- Linux环境进程间通信系列(三):消息队列
- linux C-(进程间通信 消息队列)
- 【本文已迁移到“程序员文摘” http://programmerdigest.cn/category/lajp】LAJP系列教程-第二部分-HelloWorld(Linux 消息队列)
- 【本文已迁移到“程序员文摘” http://programmerdigest.cn/category/lajp】Linux下消息队列和socket绝对速度比拼
- Linux进程间通讯之消息队列
- Linux编程常用的函数(三) 消息队列
- Linux环境进程间通信(三) (消息队列)
- Linux环境进程间通信(三)--- 消息队列
- Linux环境进程间通信(三):消息队列
- Linux环境进程间通信系列(三):消息队列
- [转]Linux环境进程间通信 -- 消息队列
- linux 共享内存 消息队列 udp通信
- Linux学习笔记--IPC中的消息队列【0604】
- linux进程间通信之消息队列
- 消息队列【Linux编程】