zoukankan      html  css  js  c++  java
  • System V 消息队列

    3.1 概述

    消息队列结构:

    struct msqid_ds
    {
            struct ipc_perm         msg_perm;        //权限结构
            struct msg              *msg_first;      //队列中第一个消息
            struct msg              *msg_last;       //队列中最后一个消息
            msglen_t                msg_cbytes;      //队列中当前消息总字节数
            msglen_t                msg_qbytes;      //队列中最大消息总字节数
            msgqnum_t               msg_qnum;        //队列中当前消息数
            pid_t                   msg_lspid;       //最后发送消息进程
            pid_t                   msg_lrpid;       //最后接收消息进程
            time_t                  msg_stime;       //最后发送时间
            time_t                  msg_rtime;       //最后接收时间
            time_t                  msg_ctime;       //最后修改时间
    };

    内核中消息队列结构:

    6.2 msgget函数

    #include <sys/msg.h>
    int msgget(key_t key,int oflag)

    oflag:0x0400|0x0200 | 0x0040|0x0020 | 0x0004|0x0002 | IPC_CREAT | IPC_EXCL

    创建一个消息队列时:

    msg_perm中的uid、gid、cuid、cgid依据调用进程来初始化

    msg_perm中的mode依据oflag进行初始化

    msg_qnum、msg_lspid、msg_lrpid、msg_stime、msg_rtime置为0

    msg_ctime置为当前时间

    msg_qbytes设置为系统限制值

    6.3 msgsnd函数

    #include <sys/msg.h>
    int msgsnd(int msqid,void *ptr,size_t len,int flag)

    ptr一般是自定义的消息结构

    struct mymsg
    {
            long type;
            char text[LEN];
    };

    len:mymsg结构中类型字段之后的数据长度

    falg:IPC_NOWAIT 非阻塞msgsnd(msgsnd不能向队列中写消息时,阻塞还是出错返回的控制位),也可以置为0

    6.4 msgrcv函数

    #include <sys/msg.h>
    ssize_t msgrcv(int msqid,void *ptr,size_t len,long type,int flag)

    ptr:接收数据缓冲区

    len:缓冲区长度

    type:接收的消息类型

             0:接收队列中第一个消息

             大于0:接收type类型的消息

             小于0:接收类型值小于等于|type|的消息中类型值最小的第一个消息

    flag:在消息队列中没有指定消息类型时,出错返回还是阻塞

    6.5 msgctl函数

    #include <sys/msg.h>
    int msgctl(int msgid,int cmd,struct msqid_ds *buf)

    IPC_STAT:将某个消息队列的信息写到buf中

    IPC_SET:按照buf中的mag_perm.uid,msg_perm.gid、msg_perm.mode和msg_qbytes修改消息队列对应项

    IPC_RMID:buf忽略,删除消息队列

  • 相关阅读:
    String.Intern原来可以减少占用内存···
    一些话···
    javascript 闭包和原型 (转载)
    20100610
    jQuery选择头像
    20100611
    新的一天又开始了····
    13种常用按钮、文本框、表单等CSS样式
    心悸···
    我对她说,你能不能换件衣服?换种心情?换种脾气?她说,可以,换个人就行了···
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4179783.html
Copyright © 2011-2022 走看看