• Linux 进程间通讯详解五


    msgrcv函数
    ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
    --功能:是从一个消息队列接收消息
    --参数:
        msqid:由msgget函数返回的消息队列标识码
        msgp:是一个指针,指针指向准备接收的消息
        msgsz:是msgp指向的消息长度,这个长度不含保存消息类型的那个long int长整型
        msgtype:它可以实现接收优先级的简单形式
        msgflg:控制着队列中没有相应类型的消息可供接收时将要发生的事
    --成功返回实际放到接收缓冲区里的字符个数(不包含保存消息类型的那个long int 长整型),失败返回-1并且设置errno
    --msgtype=0返回队列第一条信息
    --msgtype>0返回队列第一条类型msgtype的消息
    --msgtype<0返回队列第一条类型小于等于msgtype绝对值得消息,并且是满足条件的消息类型最小的消息
    --msgflg=IPC_NOWAIT,队列没有可读消息不等待,直接返回RNOMSG错误,
    --msgflg=0,队列有可读消息,直接读取,没有可读消息,继续等待,直到有消息过来再接收。
    --msgflg=MSG_NOERROR,消息大小超过msgsz时被截断
    --msgtype>0且msgflg=MSG_EXCEPT,接收类型等于msgtype的第一条信息。
    //消息队列--msgrcv()函数
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <errno.h>
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/msg.h>
    
    //接收消息的结构体
    struct msgbuf
    {
        long mtype; /* message type, must be > 0 */
        char mtext[1024]; /*这是占位符,由程序员自己决定发送消息的数组长度 */
    };
    
    int main(int arg, char * args[])
    {
        int ret = 0;
        if (arg < 2)
        {
            printf("please print one params !
    ");
            return -1;
        }
        int type=atoi(args[1]);
        int msqid = msgget(0x1234, 0666);
        if (msqid == -1)
        {
            perror("msgget() err");
            return -1;
        }
        printf("访问消息队列成功!msqid=%d
    ", msqid);
        //接收消息
        struct msgbuf buf2;
        memset(&buf2, 0, sizeof(buf2));
        ret = msgrcv(msqid, &buf2, 1024, type, 0);
        if (ret == -1)
        {
            perror("msgrcv() err");
            return -1;
        }
        printf("mtext=%s
    ", buf2.mtext);
        return 0;
    }
  • 相关阅读:
    Pset_DistributionChamberElementTypeFormedDuct
    Pset_DistributionChamberElementTypeInspectionChamber
    Pset_DistributionChamberElementTypeInspectionPit
    错误日志
    Pset_DistributionChamberElementTypeManhole
    Pset_DistributionChamberElementTypeMeterChamber
    osg绘制立方体
    Pset_AlarmPHistory
    Pset_ActuatorTypeRotationalActuation
    Pset_ActuatorTypePneumaticActuator
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6201907.html
Copyright © 2020-2023  润新知