知識講解Unix 消息隊列
由于經(jīng)常學習Unix操作系統(tǒng)的一些知識,今天,我們來學習一下Unix 消息隊列的知識,在傳統(tǒng)的單任務操作系統(tǒng)中 , 程序設(shè)計的對象一經(jīng)運行 , 程序就將獨占整個主機資源, 程序?qū)嶓w之間的不同模塊完全是通過全局變量、函數(shù)調(diào)用時的參數(shù)返回值來進行通信的。
Unix 操作系統(tǒng)是一個分時的多任務操作系統(tǒng) , 程序運行后都將成為一個獨立的實體——進程 , 進程間的通信不僅包括其內(nèi)部通信 , 還包括進程間的通信。UNIX System V 中提供了一系列的進程通信機構(gòu) , 即 IPC 機構(gòu) ,Unix 消息隊列就是其中之一。
在 Unix 系統(tǒng)中 , 所有的消息都放在系統(tǒng)內(nèi)核當中 , 并且它們都有一個相應的Unix 消息隊列標識符。進程可讀寫任意隊列中特定的消息 , 其次序是消息到達的次序 , 核心負責維護這一適當?shù)拇涡?, 而且在同一Unix 消息隊列中 , 不同的進程可分別讀出各自需要的消息 , 在其它進程向Unix 消息隊列寫入消息之前 , 進程可一直讀取消息而不必等待消息到達隊列。
每一個位于Unix 消息隊列中的消息都包括如下內(nèi)容 : 
1. 長整數(shù)類型 : 定義消息類型 
2. 消息的數(shù)據(jù)長度 : 定義數(shù)據(jù)長度 
3. 數(shù)據(jù) : 具體內(nèi)容
系統(tǒng)內(nèi)核為Unix 消息隊列維持如下數(shù)據(jù)結(jié)構(gòu)信息 , 其定義包含在 <msg.h> 頭文件中 : 
 
- struct msqid_ds{
 - struct ipc_perm msg_perms; /*operation permission struct*/
 - struct msg *msg_first;
 - /*ptr to first message on q*/
 - struct msg *msg_last;
 - /*ptr to last message on q*/
 - ushort
 - msg_cbytes;
 - /*current num bytes on q*/
 - ushort
 - msg_qnum;
 - /*no.message on q*/
 - ushort
 - msg_qbuyes;
 - /*max no.bytes for q*/
 - ushort
 - msg_lspid;
 - /*pid of last megsnd*/
 - ushort
 - msg_lrpid;
 - /*pid of last msgrcv*/
 - time_t
 - msg_stime;
 - /*last msgsnd time*/
 - time_t
 - msg_rtime;
 - /*last msgrcv time*/
 - time_t
 - msg_ctime;
 - /*last change time*/
 
類型 ushort 和 time_t 與系統(tǒng)實現(xiàn)有關(guān) , 它們包含在頭文件 <types.h> 中定義 ;ipc_perm 結(jié)構(gòu)包含了對應Unix 消息隊列的主人和存取權(quán)限 ; 結(jié)構(gòu) msg 被內(nèi)核用來把某一隊列上的消息鏈接為隊列。
這次,關(guān)于Unix 消息隊列的知識,我們就講解到這里了。希望大家能夠好好的學習這部分知識。
【編輯推薦】















 
 
 
 
 
 
 