Linux学习笔记-消息队列概念
目錄
System V IPC概念
System V IPC對象的訪問
舉幾個例子
IPC對象的權限和所有者結構體
消息隊列
消息隊列屬性
?
System V IPC概念
Unix系統存在信號、管道和命令管道等基本進程間通訊機制。
System V引入了三種高級進程間通信機制:消息隊列、共享內存、信號量;
IPC對象(消息隊列、共享內存、信號量)存在于內核中而不是文件系統中,由用戶控制釋放(用戶管理ipc對象的生命周期),不像管道的釋放由內核控制。
IPC對象通過其標識符來引用和訪問,所有IPC對象在內核空間中有唯一性標識ID,在用戶控件中的唯一性標識稱為key。
?
System V IPC對象的訪問
IPC對象是全局對象:可用ipcs,ipcrm等命令查看或刪除。
每個IPC對象都由get函數創建:
msgget,shmget,semget
調用get函數時必須指定關鍵字key
?
舉幾個例子
注意:管道是由內核控制,IPC是用戶自己控制,所以要手動釋放;
舉個例子:ipcs和ipcrm命令:
由上可知:
通信有3種,如下:
1. Shared Memory Segments;
2. Semaphore Arrays;
3. Message Queues;
?
如果加-m是指memory,-q是Queues如下:
?
IPC對象的權限和所有者結構體
struct ipc_perm{uid_t uid; //所有者的使用idgid_t gid; //所有者的組uid_t cuid; //創建者的idgid_t cgid; //創建者的組mode_t mode; //訪問模塊... };?
消息隊列
1. 消息隊列是內核中的一個鏈表;
2. 用戶進程將數據傳輸到內核后,內核重寫添加一些如用戶ID、組ID、讀寫進程的ID和優先級等相關信息后并打成一個數據包稱為消息;
3.運行一個或者多個進程往消息隊列中寫消息和讀取消息,但一個消息只能被一個進程讀取,讀取完畢后就自動刪除;
4.消息隊列具有一定的FIFO的特性,消息可以按照順序發送到隊列中,也可以幾種不同的方式從隊列中讀取。沒一個消息隊列在內核中用一個唯一的IPC消息表示ID表示;
5.消息隊列到實現包括創建和打開隊列、發送消息、讀取消息、控制消息隊列四種操作。
?
消息隊列屬性
struct msqid_ds{struct ipc_perm msg_perm;msgqnum_t msg_qnum; //消息隊列數量msglen_t msg_qbytes; //隊列的最大字節pid_t msg_lspid; //最后發送的pidpid_t msg_lrpid; //最后接收的pidtime_t msg_stime; //最后發送的時間time_t msg_ctime; //最后改變的時間 };?
總結
以上是生活随笔為你收集整理的Linux学习笔记-消息队列概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端笔记-Vue中缺少router-vi
- 下一篇: linux 其他常用命令