اگر: [E2BIG] مقدار mtext بزرگتر از msgsz و (msgflg & MSG_NOERROR) 0 باشد، تابع msgrcv از کار می افتد. [EACCES]
آیا Msgrcv مسدود می شود؟
عملکردهای msgsnd و msgrcv می توانند به عنوان عملیات مسدودکننده یا غیرمسدود شوند انجام شوند. عملیات غیرانسدادی امکان انتقال ناهمزمان پیام را فراهم می کند -- این فرآیند در نتیجه ارسال یا دریافت پیام به حالت تعلیق در نمی آید.
آیا msgrcv پیام را از صف حذف می کند؟
فراخوانی سیستمی msgrcv یک پیام را از صف تعیین شده با msqid حذف می کند و آن را در بافری که با msgp به آن اشاره شده است قرار می دهد. آرگومان msgsz حداکثر اندازه را بر حسب بایت برای mtext عضو ساختار که با آرگومان msgp به آن اشاره شده است، مشخص می کند.
msgrcv چگونه کار می کند؟
عملکرد msgrcv یک پیام را از صف پیام مشخص شده توسط پارامتر msqid می خواند و آن را در بافر تعریف شده توسط کاربر قرار می دهد که با پارامتر msgp به آن اشاره می شود. پارامتر msgp به یک بافر تعریف شده توسط کاربر اشاره می کند که باید حاوی موارد زیر باشد: فیلدی از نوع long int که نوع پیام را مشخص می کند.
msgrcv چه چیزی را برمی گرداند؟
RETURN VALUE
پس از تکمیل موفقیت آمیز، msgrcv مقداری برابر با تعداد بایت هایی که در mtext بافر قرار داده شده است، برمی گرداند. در غیر این صورت، هیچ پیامی دریافت نمیشود، msgrcv برمیگردد (ssize_t)-1 و errno برای نشان دادن خطا تنظیم میشود.