I use msgrcv function to read message from message queue. It works fine when I read known length data. Some cases my message length is variable. In such How can i allocate only require amount of memory and read the message from message queue without losing any data from message queue. Please give idea to overcome this issue.
Note: In IBM message queue, when we read exceeded length data, it fills the actual size of the message into structure which we are passing mqget function. Like this, Is there any way to do this operation in message queue.
From my brief reading of the
msgrcv()
man page, if your buffer size is too small and you don't specify theMSG_NOERROR
flag,msgrcv()
will return -1 (with errno set toE2BIG
) and leave the message in the queue.In this case, you could double your buffer size (up to
MSGMAX
, which is 8192 on linux by default) and try again.