2012-05-22 4 views
0

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

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

ответ

0

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

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

Смежные вопросы