Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 与消息队列相关的问题_C_Linux_Unix_Queue_Posix - Fatal编程技术网

C 与消息队列相关的问题

C 与消息队列相关的问题,c,linux,unix,queue,posix,C,Linux,Unix,Queue,Posix,msgrcv系统调用中的msgtype是什么?味精类型的含义是什么?请用贝吉纳语言解释?? int msgrcv(int msqid,void*msgp,尺寸\u t msgsz, 长msgtyp,int msgflg) 下面提到的消息队列使用struct是否正确 结构mybuff { 长mtype 整数标志 字符buff[50] }buf 在发送msgsnd时(msgid,&buf,sizeof(buf),0) 从: 参数msgtyp指定作为请求的消息的类型 如下: * 如果msgtyp为0,

msgrcv系统调用中的msgtype是什么?味精类型的含义是什么?请用贝吉纳语言解释?? int msgrcv(int msqid,void*msgp,尺寸\u t msgsz, 长msgtyp,int msgflg)

  • 下面提到的消息队列使用struct是否正确

    结构mybuff { 长mtype 整数标志 字符buff[50] }buf

    在发送msgsnd时(msgid,&buf,sizeof(buf),0)

  • 从:

    参数msgtyp指定作为请求的消息的类型 如下:

    *

    如果msgtyp为0,则读取队列中的第一条消息

    *

    如果msgtyp大于0,则 读取类型msgtyp,除非msgflg中在 哪种情况下,队列中类型不等于msgtyp的第一条消息 将被阅读

    *

    如果msgtyp小于0,则队列中具有 小于或等于msgtyp绝对值的最低类型为 阅读

    同样从文档中可以看出,
    msgsnd()
    的第二个参数必须是指向此结构的指针:

    struct msgbuf {
        long mtype;       /* message type, must be > 0 */
        char mtext[1];    /* message data */
    };
    
    多行文字字段是一个数组(或其他结构),其大小由msgsz(非负整数值)指定


    因此,第三个参数不是整个结构的大小,而是
    mtype
    后面所有内容的大小。因此,在初学者语言中,msgtype字段允许开发人员在设计如何处理队列中的消息时具有一定的灵活性。所有类型都是一个整数,表示要区分的内容。一些示例用途包括:

    (a) 一种信息-例如,购买交易与退款交易。这允许在同一队列中有两种(或可能更多)类型的消息

    (b) 关于哪个进程应该处理消息的指示符。
    msgrcv
    功能可用于仅读取特定类型的消息。例如,客户机可以将购买、出售、退款、状态等各种消息写入单个队列。但是,多个进程可以读取该队列,只查找它们感兴趣的消息,例如,BuyPgm将只读Buy事务

    (c) 经过充分的考虑,msgtype可以以客户端和服务器共享同一队列的方式使用。通常情况下,队列是先进先出机制,因此客户端通常会读取一个队列,然后写入一个单独的队列,以便其他进程处理。他们需要两个队列来避免阅读他们写的消息。Msgtypes允许绕过此问题。例如,客户端可以使用介于1到100之间的MSGType编写各种消息。一些进程可以处理这些消息,然后将生成的响应消息写入msgtype 200..300。然后,原始客户端可以通过只读取200-300范围内的响应消息,在其最初编写的同一队列上接收其响应消息。(或您创建的任何msgtype协议。)

    (d) msgtypes可用于将常规队列转换为粗略但有效的优先级队列。例如,您可能有一个包含所有订单事务的队列,但您设计了msgtype协议,以便首先根据msgtype处理重要客户

    发布了读取队列的规则。乍一看,这似乎令人望而生畏,但当它深入人心时,实际上是有道理的