Читать содержимое динамической длины, используя msgrcv

Я использую функцию msgrcv для чтения сообщений из очереди сообщений. Он отлично работает, когда я читаю данные известной длины. В некоторых случаях длина моего сообщения является переменной. В таком Как я могу выделить только требующийся объем памяти и прочитать сообщение из очереди сообщений без потери каких-либо данных из очереди сообщений. Пожалуйста, дайте идею, чтобы преодолеть эту проблему.

Примечание: В очереди сообщений IBM, когда мы читаем данные с превышенной длиной, он заполняет фактический размер сообщения в структуре, которую мы передаем функции mqget. Вот так, есть ли способ сделать эту операцию в очереди сообщений.

1 ответ

Из моего краткого прочтения msgrcv() man-страницу, если ваш размер буфера слишком мал и вы не указываете MSG_NOERROR флаг, msgrcv() вернет -1 (с errno установлен в E2BIG) и оставьте сообщение в очереди.

В этом случае вы можете удвоить размер буфера (до MSGMAX, что на Linux 8192 по умолчанию) и попробуйте снова.

Другие вопросы по тегам