mq_receive: message too long

前端 未结 4 964
再見小時候
再見小時候 2020-12-31 11:20

I am implementing a communication between 2 processes using a queue. The problem is that when I call the function mq_receive, I get this error: Message too long.

I h

4条回答
  •  悲&欢浪女
    2020-12-31 11:31

    It seems like you need to read the docs more carefully. When you call mq_receive you should pass size of the destination buffer. This size must be greater than the mq_msgsize attribute of the queue. In addition, it seems like you have an error in queue attributes initialisation that makes proper mq_receive call impossible. Here is standard message queue session:

    1. Fill mq_attr struct (doc):

      struct mq_attr attr;  
      attr.mq_flags = 0;  
      attr.mq_maxmsg = 10;  
      attr.mq_msgsize = 33;  
      attr.mq_curmsgs = 0;  
      
    2. Create queue with mq_open in master process (doc):

      mqd_t queue = mq_open(qname, O_CREAT|O_RDWR, 0644, &attr);
      
    3. In writer process open queue for writing:

      mqd_t queue = mq_open(qname, O_WRONLY);
      

      And send some text. Length of the text must be lesser than mq_msgsize attribute of the queue (doc):

      mq_send(queue, "some message", strlen("some message")+1, 1);
      
    4. In reader process open queue for reading:

      mqd_t queue = mq_open(qname, O_RDONLY);
      

      And then allocate buffer and receive message. Size of buffer *must be greater than the mq_msgsize attribute of the queue. Here we create 50-byte buffer while mq_msgsize == 33 (doc):

      char rcvmsg[50];
      int iret = mq_receive(queue, rcvmsg, 50, NULL);
      

    Also remember that you should use %ld for print long instead of %d.

提交回复
热议问题