`
隐形的翅膀
  • 浏览: 496648 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

控制消息队列权限

 
阅读更多
#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()`:从...

    消息队列——message

    - **安全性**:通过权限控制,可以限制哪些进程可以访问消息队列。 在实际应用中,消息队列常用于以下场景: - 进程间的同步和通信,特别是在大型分布式系统中,进程间的协作和数据交换。 - 异步任务处理,如后台...

    查看消息队列软件,消息队列工具

    4. **安全性**:提供权限控制,确保只有授权的用户或服务能访问队列。 5. **日志与跟踪**:记录消息的生命周期,便于追踪错误和性能瓶颈。 6. **集成**:支持多种编程语言和框架,方便与现有系统集成。 常见的...

    linux消息队列源码

    6. **权限控制**:消息队列具有用户、组和其他的读写权限,可以通过msgctl调用的IPC_SET选项进行修改。 7. **信号量机制**:为了保证多进程对消息队列的并发访问安全,Linux内核可能会使用信号量来实现同步。 源码...

    linux下进程间通信--消息队列

    - **控制消息队列**:通过`msgctl()`系统调用可以实现对消息队列的控制,如设置权限、删除队列等。 3. **消息队列的优点**: - 异步通信:接收进程不必在发送进程发送消息时就等待,提高了系统的并行性。 - 可...

    Linux消息队列分析及应用

    内核中处理消息队列的核心逻辑分布在多个函数中,例如sys_msgget()用于创建或获取队列,sys_msgsnd()和sys_msgrcv()分别用于发送和接收消息,而sys_msgctl()用于执行对消息队列的各种控制操作。 #### 四、实例应用 ...

    消息队列的简单示范

    消息队列的大小有限制,且具有权限控制,可以通过`ipcrm`命令删除不再需要的消息队列。 POSIX消息队列是在Linux内核2.6版后引入的,相比System V,它提供了更多的特性,如更好的权限控制、更灵活的消息类型以及文件...

    消息队列几个函数详解1

    msgflg参数可以控制队列满时的行为。成功发送后,函数返回0,否则返回-1。 3. **msgrcv()**:这个函数用于从消息队列中接收消息。msgtype参数允许我们指定希望接收的消息类型,可以实现基于类型的优先级接收。...

    windows消息队列基本操作实例

    消息优先级可以设置消息的紧急程度,队列权限管理则提供了对消息队列访问的控制。 在提供的`MSMQO操作.exe`文件中,可能包含一个演示这些基本操作的工具或示例程序。通过运行这个程序,你可以直观地了解MSMQ的使用...

    PB消息队列聊天源码

    5. 安全性:在实际应用中,还需要考虑消息的安全性,比如使用加密传输以防止数据泄露,以及权限控制来限制不同用户或服务对消息队列的访问。 通过PB消息队列,聊天应用可以实现高效、可靠的消息传递,提升用户体验...

    四种UNIX消息队列操作函数.rar_C 消息队列_消息队列 _消息队列 unix

    在UNIX操作系统中,消息队列是一种进程间通信(IPC,Inter-Process ...同时,要关注权限问题,确保进程有正确的权限来访问和操作消息队列。通过实践编写示例程序,可以更好地掌握这些概念,并在实际项目中灵活应用。

    抢占式OS消息队列例程

    5. **信号量与消息队列**:消息队列通常与信号量结合使用,用于控制对共享资源的访问。消息队列负责数据交换,信号量则用于同步和互斥。 6. **消息类型与长度**:消息队列可以支持不同长度和类型的消息,开发者需要...

    linux下消息队列例程源码.zip

    - `msgctl`: 对消息队列进行控制操作,如设置权限、删除队列等。 - `msgsnd`: 向消息队列发送一个消息。 - `msgrcv`: 从消息队列接收一个消息,可以选择按类型或按顺序接收。 **4. 在驱动开发中的应用** 在Linux...

    消息队列源码-Linux.zip

    2. 系统调用实现:研究系统调用的内核级实现,了解消息是如何添加到队列、从队列中移除以及如何控制队列的。 3. 锁和同步机制:理解在多线程或多进程环境中,如何使用信号量、互斥锁等机制来保证数据的一致性和完整...

    Linux下的消息队列测试程序,helloworld MessageTest

    6. **消息队列权限**: 创建消息队列时,可以指定其访问权限,如读写权限、所有者、组和其他用户的权限。 7. **消息优先级**: 有些实现允许为消息指定优先级,这样高优先级的消息可以优先被处理。 8. **消息队列的...

    Linux消息队列分析及应用.pdf

    每个msqid_ds结构体包含了访问控制信息和指向消息的指针,还有用于写进程和读进程等待队列的数据结构。 2. **权限检查**:每次进程试图向消息队列写入消息时,系统会比较进程的有效用户标识和组标识与队列的访问...

    进程间消息队列通信机制的使用

    4. **`msgctl()`**:对消息队列执行各种控制操作,例如删除消息队列。 - 参数: - `int msqid`:消息队列标识符。 - `int cmd`:控制命令,如 `IPC_RMID` 表示删除队列。 - `struct msqid_ds *buf`:通常为0。 ...

    局域网消息队列

    7. **安全与权限控制**:局域网消息队列通常需要实施安全措施,例如身份验证和授权,以防止未经授权的访问。这可能涉及使用SSL/TLS加密通信,以及设置用户权限来限制对消息队列的访问。 8. **监控与日志**:为了...

    msg.zip_LINUX消息队列_linux 消息队列

    这些程序可能会展示如何使用`&lt;sys/msg.h&gt;`头文件中的函数,例如`msgget`(创建或获取消息队列)、`msgrcv`(接收消息)、`msgsnd`(发送消息)和`msgctl`(控制消息队列,如设置权限、删除队列等)。 消息队列的...

    linux消息队列进程间通信

    此外,`msgctl`系统调用可以用来控制消息队列,如设置权限、查看状态等。 在《Linux环境进程间通信(二):信号.doc》中,我们了解到信号是另一种进程间通信方式,它用于通知接收进程发生了特定事件。虽然信号快速且...

Global site tag (gtag.js) - Google Analytics