簡體   English   中英

IPC消息隊列溢出后果

[英]IPC message queue overflow consequences

我正在創建一個 C 應用程序,它將在 openwrt 路由器設備中執行。 由於資源有限,我對消息隊列有點害怕。 如果從隊列中獲取消息的“讀取器”應用程序崩潰並且“寫入器”仍然發送消息怎么辦? 我應該擔心設備的 memory 還是消息隊列最終會自行清理?

編輯我意識到我對我的任務不夠清楚。 一個應用程序將發送消息,而另一個應用程序將讀取和處理它們。

請參閱msgsnd的文檔

隊列容量由消息隊列的相關數據結構中的 msg_qbytes 字段控制。 在隊列創建期間,此字段被初始化為 MSGMNB 字節,但可以使用 msgctl(2) 修改此限制。

如果隊列中可用空間不足,則 msgsnd() 的默認行為是阻塞,直到空間可用。 如果在 msgflg 中指定了 IPC_NOWAIT,則調用將失敗並顯示錯誤 EAGAIN。

所以發送者將等待接收者處理消息,除非你使用IPC_NOWAIT ,在這種情況下它返回EAGAIN並且發送者可以檢查這個錯誤代碼。

默認的最大緩沖區大小在名為 MSGMNB 的常量中指定。 您可以打印此值以查看它在您的系統上的內容。 要更改隊列的最大大小,可以使用 function msgctl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM