#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;
}
分享到:
相关推荐
权限模式(0666)控制对消息队列的访问权限。 3. `msgsnd()`:发送消息到消息队列。`msg`是一个结构体,包含消息类型和消息数据。`strlen(msg.mtext) + 1`表示消息的长度,包括结束的null字符。 4. `msgrcv()`:从...
- **安全性**:通过权限控制,可以限制哪些进程可以访问消息队列。 在实际应用中,消息队列常用于以下场景: - 进程间的同步和通信,特别是在大型分布式系统中,进程间的协作和数据交换。 - 异步任务处理,如后台...
4. **安全性**:提供权限控制,确保只有授权的用户或服务能访问队列。 5. **日志与跟踪**:记录消息的生命周期,便于追踪错误和性能瓶颈。 6. **集成**:支持多种编程语言和框架,方便与现有系统集成。 常见的...
6. **权限控制**:消息队列具有用户、组和其他的读写权限,可以通过msgctl调用的IPC_SET选项进行修改。 7. **信号量机制**:为了保证多进程对消息队列的并发访问安全,Linux内核可能会使用信号量来实现同步。 源码...
- **控制消息队列**:通过`msgctl()`系统调用可以实现对消息队列的控制,如设置权限、删除队列等。 3. **消息队列的优点**: - 异步通信:接收进程不必在发送进程发送消息时就等待,提高了系统的并行性。 - 可...
内核中处理消息队列的核心逻辑分布在多个函数中,例如sys_msgget()用于创建或获取队列,sys_msgsnd()和sys_msgrcv()分别用于发送和接收消息,而sys_msgctl()用于执行对消息队列的各种控制操作。 #### 四、实例应用 ...
消息队列的大小有限制,且具有权限控制,可以通过`ipcrm`命令删除不再需要的消息队列。 POSIX消息队列是在Linux内核2.6版后引入的,相比System V,它提供了更多的特性,如更好的权限控制、更灵活的消息类型以及文件...
msgflg参数可以控制队列满时的行为。成功发送后,函数返回0,否则返回-1。 3. **msgrcv()**:这个函数用于从消息队列中接收消息。msgtype参数允许我们指定希望接收的消息类型,可以实现基于类型的优先级接收。...
消息优先级可以设置消息的紧急程度,队列权限管理则提供了对消息队列访问的控制。 在提供的`MSMQO操作.exe`文件中,可能包含一个演示这些基本操作的工具或示例程序。通过运行这个程序,你可以直观地了解MSMQ的使用...
5. 安全性:在实际应用中,还需要考虑消息的安全性,比如使用加密传输以防止数据泄露,以及权限控制来限制不同用户或服务对消息队列的访问。 通过PB消息队列,聊天应用可以实现高效、可靠的消息传递,提升用户体验...
在UNIX操作系统中,消息队列是一种进程间通信(IPC,Inter-Process ...同时,要关注权限问题,确保进程有正确的权限来访问和操作消息队列。通过实践编写示例程序,可以更好地掌握这些概念,并在实际项目中灵活应用。
5. **信号量与消息队列**:消息队列通常与信号量结合使用,用于控制对共享资源的访问。消息队列负责数据交换,信号量则用于同步和互斥。 6. **消息类型与长度**:消息队列可以支持不同长度和类型的消息,开发者需要...
- `msgctl`: 对消息队列进行控制操作,如设置权限、删除队列等。 - `msgsnd`: 向消息队列发送一个消息。 - `msgrcv`: 从消息队列接收一个消息,可以选择按类型或按顺序接收。 **4. 在驱动开发中的应用** 在Linux...
2. 系统调用实现:研究系统调用的内核级实现,了解消息是如何添加到队列、从队列中移除以及如何控制队列的。 3. 锁和同步机制:理解在多线程或多进程环境中,如何使用信号量、互斥锁等机制来保证数据的一致性和完整...
6. **消息队列权限**: 创建消息队列时,可以指定其访问权限,如读写权限、所有者、组和其他用户的权限。 7. **消息优先级**: 有些实现允许为消息指定优先级,这样高优先级的消息可以优先被处理。 8. **消息队列的...
每个msqid_ds结构体包含了访问控制信息和指向消息的指针,还有用于写进程和读进程等待队列的数据结构。 2. **权限检查**:每次进程试图向消息队列写入消息时,系统会比较进程的有效用户标识和组标识与队列的访问...
4. **`msgctl()`**:对消息队列执行各种控制操作,例如删除消息队列。 - 参数: - `int msqid`:消息队列标识符。 - `int cmd`:控制命令,如 `IPC_RMID` 表示删除队列。 - `struct msqid_ds *buf`:通常为0。 ...
7. **安全与权限控制**:局域网消息队列通常需要实施安全措施,例如身份验证和授权,以防止未经授权的访问。这可能涉及使用SSL/TLS加密通信,以及设置用户权限来限制对消息队列的访问。 8. **监控与日志**:为了...
这些程序可能会展示如何使用`<sys/msg.h>`头文件中的函数,例如`msgget`(创建或获取消息队列)、`msgrcv`(接收消息)、`msgsnd`(发送消息)和`msgctl`(控制消息队列,如设置权限、删除队列等)。 消息队列的...
此外,`msgctl`系统调用可以用来控制消息队列,如设置权限、查看状态等。 在《Linux环境进程间通信(二):信号.doc》中,我们了解到信号是另一种进程间通信方式,它用于通知接收进程发生了特定事件。虽然信号快速且...