雖然說是程序間通訊中有關訊息佇列的乙個比較詳細的分析
同樣的,共享記憶體,訊號量和訊息佇列的公共部分知識也都同理
首先:使用xsi ipc需要首先了解識別符號和鍵的概念
識別符號是標識ipc物件的乙個量,通常由乙個int型變數表示,不過識別符號只是ipc物件的內部名,如果要使的多個程序能夠使用同乙個ipc,需要得到乙個外部名,這個外部名就是鍵--key,每個ipc物件都與乙個鍵相關聯
對於訊息佇列:可以通過函式magget通過乙個鍵獲得他的識別符號,即通過外部標識得到內部標識的乙個方法
例如:我們知道乙個訊息佇列的鍵是msg_key;
那麼:可以通過下列**段
int msg_id;
nsg_id=msgget(msg_key,0666|ipc_creat|ipc_excl);
獲取訊息佇列的id。
得到了訊息佇列的id後,我們就可以開始作很多行為了
如果你想要改變訊息佇列的一些屬性,可以使用函式msgctl
如果想從訊息佇列中傳送訊息或獲取訊息,可以使用這兩個函式
msgsnd,msgrcv
下面詳細講解一下msgsnd
這個函式的原型是:
int msgsnd(int msgid,const void *ptr,size_t nbytes,int flags);
第乙個引數是訊息佇列的id
第二個引數是要傳送給訊息佇列的正長整形型別字段 稍後解釋這個引數
第三個引數是要傳送的實際資料位元組(對應於長度)
第四個引數是設定符
如果我們想傳送一段資料,我們可以這樣做:
首先,建立乙個這樣的結構體
struct mymsg
long mtype; //這就是第二個引數所說的正長整形型別字段,表示傳送資訊的型別
char mtext[size]; //size 可以自定,跟第三個引數有關
下面是向訊息佇列傳送一段資料的**段
struct mymsg
msg;
msg.type=1;
strcpy(msg.mtext,"hello");
if(msgsnd(msg_id,&msg,10,ipc_nowait)==-1)
fatal("msgsnd");
printf("send sucess!/n");
exit(0);
值得注意的是,第三個引數是結構體中第二個成員的大小,而不是整個結構體的大小
下面是《unix環境高階程式設計》中第15章中習題5.12 剛寫的 發出來吧,希望對大家能夠有所幫助,如果
有朋友也在看這本書的話,很希望多多交流~~
const詳細分析
最近在分析 linux 驅動的過程過程中遇到一些關於 const 的使用,現在在這裡詳細剖析一下 一,const int p 首先分析一下幾個概念 1 p 是乙個指標變數,因而它也是乙個變數,所謂變數就有變數的位址和變數的值,而這裡 p變數的值就是乙個位址,該位址下存放的是乙個整數,p的值等於這個整...
約數詳細分析
約數詳細分析 我們先來認識一下約數 約數分正約數和負約數兩種,我們一般只討論正約數。也就是說,接下來所提的約數,只考慮正約數。如果有乙個數k,滿足k n,那麼k就是n 的約數 因數 n是k的倍數。求乙個數的約數是資訊學競賽裡乙個基礎的不能再基礎的問題。如果只求乙個數,最容易想到的就是列舉。當然列舉也...
vue cli 詳細分析
vue lic 是 vue 官方提供的腳手架工具,預設搭建好乙個專案的基本架子,我們只需要在此基礎上進行相應的修改即可。注意 安裝 vue cli 前需要事先配置好 node 環境 npm install g vue cli 如果是 mac 電 sudo表示以管理員的許可權 sudo install...