精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux中消息隊列的使用

系統(tǒng) Linux
今天帶小伙伴們學習了消息隊列相關(guān)的內(nèi)容,先簡單介紹下消息隊列,然后對消息隊列相關(guān)的結(jié)構(gòu)及函數(shù)進行學習,最后擼代碼使用一下這些函數(shù)使用一下消息隊列,希望對大家有所幫助哈!

[[386753]]

今天帶小伙伴們學習了消息隊列相關(guān)的內(nèi)容,先簡單介紹下消息隊列,然后對消息隊列相關(guān)的結(jié)構(gòu)及函數(shù)進行學習,最后擼代碼使用一下這些函數(shù)使用一下消息隊列,希望對大家有所幫助哈!

1 消息隊列的概念及使用過程

1)消息隊列的概念

消息隊列就是一個消息的鏈表。一條消息可以看作一個數(shù)據(jù)記錄,此數(shù)據(jù)具有特定的格式。

進程可以按照特定的規(guī)則向隊列中添加(寫入)消息;其他的進程則可以從消息隊列中讀走消息。

2)消息隊列的應用場景

消息隊列本身就是IPC通信中的內(nèi)容,所以它主要用于進程間的通信。

消息有讀寫,所以發(fā)送的消息可以用于動作的通知信號,也可以接收數(shù)據(jù)然后做其他處理。

2 消息隊列相關(guān)的結(jié)構(gòu)及函數(shù)

0)消息隊列相關(guān)的結(jié)構(gòu)

每個隊列都有一個msqid_ds結(jié)構(gòu)與其相關(guān)聯(lián),結(jié)構(gòu)如下。

  1. struct msqid_ds  
  2.      struct ipc_perm msg_perm;     // 消息隊列的存取權(quán)限以及其他一些信息                     
  3.      time_t          msg_stime;    // 最近一次隊列接受消息的時間 
  4.      time_t          msg_rtime;    // 最近一次從隊列中取出消息的時間 
  5.      time_t          msg_ctime;    // 最近一次隊列發(fā)生改動的時間 
  6.      unsigned long   __msg_cbytes; // 隊列中消息的占用內(nèi)存的字節(jié)數(shù) 
  7.      msgqnum_t       msg_qnum;     // 隊列中當前的消息數(shù) 
  8.      msglen_t        msg_qbytes;   // 隊列所占用內(nèi)存的最大字節(jié)數(shù) 
  9.      pid_t           msg_lspid;    // 最近一次向隊列發(fā)送消息的進程的pid msgsnd 
  10.      pid_t           msg_lrpid;    // 最近一次從隊列中取出消息的進程的pid 
  11. }; 
  1. struct ipc_perm 
  2.      key_t key
  3.      ushort uid;         // 用戶id,有效的用戶ID和有效的組id(euid和egid)  
  4.      ushort gid; 
  5.      ushort cuid;        // 創(chuàng)建者的euid和egid  
  6.      ushort cgid; 
  7.      ushort mode;        // 訪問模式參見模式標志  
  8.      ushort seq;         // IPC對象使用頻率信息 
  9. }; 

1)msgget函數(shù)

msgget函數(shù)用于創(chuàng)建或打開消息隊列。

① 函數(shù)原型。

  1. int msgget(key_t key,int msgflg) 

② 頭文件。

  1. include <sys/ipc.h>  
  2.  
  3. include <sys/msg.h>  
  4.  
  5. include <sys/types.h>  

③ 參數(shù)。

key:鍵值。

msgflg:打開標志。IPC_CREAT:表明新創(chuàng)建的一個消息隊列。

④ 返回值。

成功:返回消息隊列的id。

失敗:-1。

2)msgsnd函數(shù)

msgsnd函數(shù)用于發(fā)送消息,即寫消息到消息隊列。

① 函數(shù)原型。

  1. int msgsnd(int msgid,const void *msgp,size_t msgsz,int msgflg) 

② 頭文件。

  1. include <sys/ipc.h>  
  2.  
  3. include <sys/types.h>  
  4.  
  5. include <sys/msg.h>  

③ 參數(shù)。

msgid:消息隊列的id。

msgp:指向要發(fā)送的消息。

msgsz:消息的長度。

msgflg:標志位。

④ 返回值。

成功:0。

失敗:-1。

3)msgrcv函數(shù)

msgrcv函數(shù)用于讀消息隊列,即從消息隊列接收消息。

① 函數(shù)原型。

  1. int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg) 
  2.  
  3. ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,intmsgflg) 

② 頭文件。

  1. #include <sys/ipc.h>  
  2.  
  3. #include <sys/types.h> 
  4.  
  5. #include <sys/msg.h>  

③ 參數(shù)。

msqid:消息隊列的id。

msgp:存放消息。

msgsz:希望取到的消息的最大長度。

msgtyp:消息的類型,分下面三種情況:

當 msgtyp = 0:忽略類型,直接取隊列中的第一條消息。

當 msgtyp > 0: 取消息隊列中類型等于msgtyp的第一條消息。

當 msgtyp < 0: 取類型比msgtyp的絕對值要小或等于的消息,如果有多條消息

滿足該條件,取類型最小的一條。

④ 返回值。

成功:實際接收到的消息的數(shù)據(jù)長度。

失敗:-1。

4)msgctl函數(shù)

msgctl函數(shù)用于操作消息隊列,比如進行消息隊列的刪除等等。

① 函數(shù)原型。

  1. int msgctl(int msqid,int cmd,struct msqid_ds *buf) 

② 頭文件。

  1. #include <sys/ipc.h> 
  2.  
  3. #include <sys/msg.h>  
  4.  
  5. #include <sys/types.h>  

③ 參數(shù)。

msqid:消息隊列的id。

cmd:消息隊列的操作命令,此參數(shù)指定對msqid指定的隊列要執(zhí)行的命令。

IPC_STAT:取此隊列的msqidds結(jié)構(gòu),并將它存放在buf指向的結(jié)構(gòu)中。

IPCSET:將字段msg_perm.uid、msg_perm.gid、msg_perm.mode和msg_qbytes從buf指向的結(jié)構(gòu)復制到與這個隊列相關(guān)的msqid_ds結(jié)構(gòu)中。

此命令只能由下列兩種進程執(zhí)行:

一種是其有效用戶ID等于msg_perm.cuid或msg perm.uid。

另一種是具有超級用戶特權(quán)的進程。只有超級用戶才能增加msg_qbytes的值。

IPC_RMID:從系統(tǒng)中刪除該消息隊列以及仍在該隊列中的所有數(shù)據(jù)。這種刪除立即生效。

仍在使用這一消息隊列的其他進程在它們下一次試圖對此隊列進行操作時,將得到EIDRM錯誤。

此命令只能由下列兩種進程執(zhí)行:

一種是其有效用戶ID等于msg_perm.cuid或msg_perm.uid。

另一種是具有超級用戶特權(quán)的進程。這3條命令(IPC_STAT、IPC_SET和IPC_RMID)也可用于信號量和共享存儲。

buf:獲取內(nèi)核中的msqid_ds結(jié)構(gòu),通常不用。

④ 返回值。

成功:0。

失敗:-1。

3 實例代碼

下面用兩個進程,給大家演示下消息隊列的使用過程。

實例代碼如下,說明都在代碼注釋中了,圖片。

SendQueue.c。

  1. #include<stdio.h> 
  2. #include<sys/types.h> 
  3. #include<sys/ipc.h> 
  4. #include<sys/msg.h> 
  5. #include<string.h> 
  6.  
  7. // 消息結(jié)構(gòu)體 
  8. struct msg 
  9.       long msgtype;       //消息的類型 
  10.       char msgtext[1024]; //消息的長度 
  11. }; 
  12.  
  13.  
  14. void main(int argc, char *argv[]) 
  15.       int msgid; 
  16.       char str[256]; 
  17.       struct msg msgst; 
  18.    
  19.       key_t key = ftok("/tmp",600); 
  20.  
  21.       //創(chuàng)建消息隊列  
  22.       msgid = msgget(key,0666 | IPC_CREAT); 
  23.  
  24.       //鍵盤輸入消息 
  25.       while(1) 
  26.       {        
  27.             //獲取消息數(shù)據(jù) 
  28.             printf("\nPlease enter a message to send,input 'end' to quit!\n\n"); 
  29.             scanf("%s",str); 
  30.  
  31.             strcpy(msgst.msgtext,str); 
  32.      
  33.             if(strncmp(str, "end", 3) == 0) 
  34.             { 
  35.                   printf("\n"); 
  36.                   break; 
  37.             } 
  38.  
  39.             //發(fā)送消息 
  40.             msgsnd(msgid,&msgst,sizeof(struct msg),0); 
  41.       } 
  42.  
  43.        //輸出消息隊列 
  44.        msgctl(msgid,IPC_RMID,0); 

ReceiveQueue.c。

  1. #include <unistd.h> 
  2. #include <stdlib.h> 
  3. #include <stdio.h> 
  4. #include <string.h> 
  5. #include <errno.h> 
  6. #include <sys/msg.h> 
  7.  
  8. // 消息結(jié)構(gòu)體 
  9. struct msg 
  10.       long msgtype; 
  11.       char msgtext[1024]; 
  12. }; 
  13.   
  14.   
  15. int main(int argc, char *argv[]) 
  16.       int RunFlag = 1;                         // 循環(huán)標志 
  17.       int msgid = -1;                          // 消息id 
  18.       long msgtp = 0;                          // 消息類型 
  19.   
  20.       struct msg msgst;                        // 消息結(jié)構(gòu)體變量 
  21.   
  22.       key_t key = ftok("/tmp",600);            // 創(chuàng)建一個鍵值 
  23.   
  24.       msgid = msgget(key, 0666 | IPC_CREAT);   //建立消息隊列 
  25.   
  26.       if(msgid == -1) 
  27.       { 
  28.             exit(1);                           // 異常退出 
  29.       } 
  30.   
  31.   
  32.       while(RunFlag)                           // 從隊列中獲取消息,直到遇到end消息為止 
  33.       { 
  34.             if(msgrcv(msgid,&msgst,sizeof(struct msg), msgtp, 0) == -1) 
  35.             { 
  36.                   exit(1);                     // 異常退出 
  37.             } 
  38.             printf("\nThe message received is: %s\n\n",msgst.msgtext); 
  39.    
  40.    
  41.             if(strncmp(msgst.msgtext, "end", 3) == 0) // 遇到end結(jié)束 
  42.             { 
  43.                   RunFlag = 0;                // 置退出循環(huán)標志 
  44.             } 
  45.     
  46.       } 
  47.   
  48.   
  49.       if(msgctl(msgid, IPC_RMID, 0) == -1)    // 刪除消息隊列 
  50.       { 
  51.             exit(1);                          // 異常退出 
  52.       } 
  53.         
  54.       exit(0);                                // 正常退出 

編譯程序,先運行接收程序,再運行發(fā)送程序,輸入要發(fā)送的消息,退出輸入end。

① 兩個終端運行結(jié)果如下:

② 單個終端運行結(jié)果如下:

本文轉(zhuǎn)載自微信公眾號「嵌入式雜牌軍」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系嵌入式雜牌軍公眾號。

 

責任編輯:武曉燕 來源: 嵌入式雜牌軍
相關(guān)推薦

2017-06-19 13:36:12

Linux進程消息隊列

2019-05-13 10:00:41

Linux進程間通信命令

2024-03-22 12:10:39

Redis消息隊列數(shù)據(jù)庫

2022-01-21 19:22:45

RedisList命令

2022-01-15 07:20:18

Redis List 消息隊列

2017-10-11 15:08:28

消息隊列常見

2010-01-21 11:23:49

Linux多線程同步消息隊列

2025-02-26 07:53:21

2024-10-16 15:11:58

消息隊列系統(tǒng)設計

2022-06-28 08:37:07

分布式服務器WebSocket

2023-11-07 10:01:34

2010-04-21 14:49:13

Unix消息隊列

2018-04-26 15:18:49

RTOS應用MPU

2024-06-05 06:37:19

2024-05-16 08:10:17

RabbitMQ軟件通信機制

2023-07-26 07:28:55

WebSocket服務器方案

2020-09-27 07:44:08

RabbitMQ投遞消息

2023-12-18 08:36:39

消息隊列微服務開發(fā)

2022-12-13 09:19:26

分布式消息隊列

2025-01-02 09:23:05

點贊
收藏

51CTO技術(shù)棧公眾號

国产成人一区在线| 亚洲情侣在线| 欧美日韩一级视频| 老司机午夜网站| 男人天堂av网| 免费在线一区观看| 午夜精品久久久久久久久久久久| 精品亚洲aⅴ无码一区二区三区| 国产一区二区三区免费在线| 欧美日韩亚洲一区二| 亚洲资源在线网| 亚洲av电影一区| 国产米奇在线777精品观看| 国产69久久精品成人看| 色在线观看视频| 波多野结衣一区| 日韩高清av一区二区三区| 国产又黄又猛的视频| 蜜臀国产一区| 亚洲电影中文字幕在线观看| 一区二区三区在线观看www| 天堂中文在线观看视频| 久久精品国产一区二区三区免费看| 91精品国产99久久久久久| 久久国产高清视频| 精品无人区麻豆乱码久久久| 精品久久久久久最新网址| 91亚洲免费视频| 欧美二三四区| 天天操天天色综合| 丁香婷婷综合激情| 2024最新电影免费在线观看| 中文字幕乱码一区二区免费| 久久综合中文色婷婷| 黄色aaa大片| 国产乱码精品一区二区三区忘忧草| 国产精品一二三视频| 日韩 国产 欧美| 国产精品试看| 97在线观看视频国产| 久久久久久久久久久97| 欧美日本不卡高清| 久久99精品久久久久久噜噜 | av电影在线观看完整版一区二区| 成人羞羞国产免费| 亚洲一线在线观看| 麻豆精品一区二区| 国产欧美精品久久久| 亚洲熟妇无码久久精品| 免费人成黄页网站在线一区二区| 国产福利精品在线| 波多野结衣一区二区三区四区| 香蕉久久久久久久av网站| 97在线看福利| 欧美黑人一区二区| 久久天堂成人| 国产成人免费91av在线| 国产免费a视频| 日本一不卡视频| 国产精品欧美一区二区三区奶水 | 日韩电影在线观看电影| 国产精品96久久久久久| 成人一级免费视频| 久久电影网电视剧免费观看| 成人深夜直播免费观看| 成人av无码一区二区三区| 国产精品一区二区三区网站| 99视频日韩| 五月激情丁香婷婷| 久久久久久麻豆| 午夜视频久久久| 超碰免费公开在线| 午夜成人免费视频| 日韩在线第三页| 91精品麻豆| 亚洲第一免费播放区| 少妇特黄一区二区三区| 成人高清av| 美女精品久久久| 日韩精品一区二区不卡| 久久高清国产| 成人黄色激情网| 好吊色视频一区二区| 2021久久国产精品不只是精品 | 欧美一区二区三区久久精品茉莉花| 欧美成人午夜视频| 日本一区二区三区精品| 久久99蜜桃精品| 好看的日韩精品视频在线| 国产一二三区在线| 一区二区三区在线免费观看 | 国产伦精品一区二区三区视频金莲| 欧美性xxxxxxx| 国产精品久久久久久久av福利| 成人在线视频中文字幕| 亚洲新声在线观看| 欧美成人综合色| 美女国产一区二区三区| 国产精品一区二区三区在线| av播放在线观看| 亚洲成av人片一区二区梦乃| 艹b视频在线观看| 久9re热视频这里只有精品| 日韩中文字幕欧美| 国产精品男女视频| 国产盗摄精品一区二区三区在线 | 黄色毛片在线看| 亚洲精品大片www| 色诱视频在线观看| 91欧美极品| www.xxxx精品| 国产无遮挡又黄又爽又色视频| 粉嫩蜜臀av国产精品网站| 色一情一乱一伦一区二区三区| 国产v日韩v欧美v| 欧美一级欧美三级在线观看| 国产三级短视频| 亚洲资源av| 国产精品久久亚洲| www免费在线观看| 欧美中文字幕一二三区视频| 欧洲一级黄色片| 国内精品福利| 91久久久久久久| a视频网址在线观看| 五月天丁香久久| jjzz黄色片| 欧美另类女人| 亚洲综合成人婷婷小说| 五月香视频在线观看| 色偷偷久久一区二区三区| 漂亮人妻被黑人久久精品| 51精产品一区一区三区| 成人精品一区二区三区电影免费| 成人高清网站| 日本道色综合久久| 无码国产69精品久久久久同性| 在线一区视频| 久久久久高清| 一区一区三区| 日韩精品视频在线播放| 国产成人在线免费观看视频| av网站免费线看精品| 国产精品无码人妻一区二区在线| 草草视频在线一区二区| 久久久久久12| 日本xxxxxwwwww| 偷拍日韩校园综合在线| 一级特黄a大片免费| 国产亚洲精品v| 久久爱av电影| 韩国久久久久久| 国产亚洲精品一区二区| 中文字幕福利视频| 成人免费在线观看入口| 韩国三级在线播放| 一区免费视频| 久久婷婷人人澡人人喊人人爽| 性感女国产在线| 亚洲日韩中文字幕在线播放| 波多野结衣大片| 国产精品全国免费观看高清| 中文字幕中文在线| 久久精品影视| 北条麻妃高清一区| 一个人www视频在线免费观看| 亚洲欧洲激情在线| 91中文字幕在线播放| 一区二区高清免费观看影视大全| 国产国语老龄妇女a片| 蜜桃伊人久久| 亚洲一区二三| 一区中文字幕| 国产91网红主播在线观看| 日韩理伦片在线| 日韩精品一区二区三区三区免费| 日韩av免费网址| 国产丝袜美腿一区二区三区| 亚洲免费999| 亚洲国产精品第一区二区三区| 青娱乐一区二区| 成人国产精品久久| 18久久久久久| 人人干在线视频| 亚洲精品在线免费播放| 樱花视频在线免费观看| 亚洲精选一二三| 亚洲欧美视频在线播放| 久久99国产精品免费网站| 久久综合久久网| 日韩精品一区二区久久| 国产精品一区二区三区不卡| 国产精品麻豆成人av电影艾秋| 欧美激情精品久久久久久黑人| 免费在线国产| 日韩久久久精品| 国产精品无码粉嫩小泬| 亚洲一区二区三区在线播放| 亚洲黄色网址大全| 91麻豆精品秘密| 伦伦影院午夜理论片| 久久男女视频| 欧美无砖专区免费| 久久中文亚洲字幕| 欧美日韩综合久久| 亚洲精品在线播放| 国产在线999| 亚州一区二区三区| 国产69精品久久久久99| 国产网站在线免费观看| 亚洲欧美中文日韩在线| 国产高清视频免费观看| 欧美色精品在线视频| 中日韩黄色大片| 伊人开心综合网| 国产一二三四视频| 国产午夜亚洲精品不卡| 亚洲一级Av无码毛片久久精品| 激情五月激情综合网| chinese少妇国语对白| 夜夜精品视频| 国产精品国产对白熟妇| 欧美在线二区| 综合色婷婷一区二区亚洲欧美国产| 亚洲精品推荐| 久久精品magnetxturnbtih| 911精品国产| 99国产高清| 136导航精品福利| 999国内精品视频在线| 高清久久一区| 成人a在线观看| 欧美啪啪网站| 成人疯狂猛交xxx| 四虎4545www国产精品| 日本精品一区二区三区在线播放视频 | 日韩欧美精品免费| 国内激情久久| 轻点好疼好大好爽视频| 欧美理论在线| 丰满的少妇愉情hd高清果冻传媒| 欧美在线亚洲| 丁香六月激情网| 亚洲国产精品一区| 无码人妻丰满熟妇区96| 免费亚洲视频| 日韩av播放器| 奇米色777欧美一区二区| 精品999在线| 久久99精品国产麻豆婷婷洗澡| 福利片一区二区三区| 国产一区二区三区在线观看精品| 午夜一级免费视频| 国产麻豆精品久久一二三| 国产人妖在线观看| 成人黄页在线观看| 青青草视频播放| 国产女人18毛片水真多成人如厕| 久久久精品成人| 亚洲欧美日韩在线| 精品无码一区二区三区电影桃花| 亚洲成a人v欧美综合天堂| 亚洲欧美在线视频免费| 色女孩综合影院| 一级全黄少妇性色生活片| 欧美一区二区三区小说| 天堂av手机版| 亚洲一品av免费观看| 网友自拍视频在线| 久久99精品视频一区97| 国产伦子伦对白在线播放观看| 国产激情久久久| 看亚洲a级一级毛片| 国产欧美日韩伦理| 精品日韩在线| 国产一区 在线播放| 一区二区毛片| av中文字幕网址| 高清久久久久久| 最近中文字幕在线mv视频在线| 国产精品久久久久9999吃药| 国产无遮挡又黄又爽在线观看 | av高清一区二区| 日韩精品福利网站| 国产在线观看a| 57pao成人国产永久免费| 日本中文字幕视频一区| 国产亚洲精品美女久久久m| 欧美色图国产精品| 无码日本精品xxxxxxxxx| 日韩精品乱码av一区二区| 初高中福利视频网站| 久久亚洲私人国产精品va媚药| 国产馆在线观看| 黑丝美女久久久| 一区二区美女视频| 亚洲成人av中文字幕| 成人av电影观看| 欧美黑人xxx| 久久伊人国产| 久久精品日韩精品| 国产主播精品| 亚洲美女爱爱视频| 久久久久国产精品免费免费搜索| 69xx绿帽三人行| 欧美日韩一区二区三区四区| 天天射天天操天天干| 久久影院在线观看| 日本一区免费网站| 久久久久久九九| 影音先锋在线一区| 中文字幕第22页| 国产精品久久久久久妇女6080| 在线观看 亚洲| 亚洲激情视频在线| 亚洲色图美国十次| 成人免费自拍视频| 国内精品久久久久久99蜜桃| 精品人妻一区二区三区四区在线 | 97人妻人人揉人人躁人人| 亚洲高清三级视频| 精品人妻一区二区三区蜜桃 | 欧美日韩免费一区二区| 欧美日韩第一区日日骚| 国产毛片在线| 日韩美女av在线免费观看| 精品深夜福利视频| 国产美女主播在线| 国产福利一区二区三区在线视频| 美国一级片在线观看| 欧美三级日韩在线| jyzzz在线观看视频| 日产日韩在线亚洲欧美| 亚洲三级网址| 日本毛片在线免费观看| 91香蕉视频mp4| 毛片基地在线观看| 亚洲美女动态图120秒| 亚洲一区站长工具| 农村寡妇一区二区三区| 久久精品一区二区国产| 谁有免费的黄色网址| 色哟哟亚洲精品| 国产黄在线播放| 国产精品中文久久久久久久| 日韩精品一区二区久久| 天天干天天操天天做| 1区2区3区欧美| 国产乱码久久久| 欧美大胆在线视频| 91精品入口| 欧美啪啪免费视频| 久久久综合网站| 中文区中文字幕免费看| 日韩中文字幕网址| 激情综合婷婷| 国产精品一线二线三线| 久久先锋资源网| 黄色污污网站在线观看| 中文字幕不卡av| 91精品福利观看| 国产精品入口芒果| 久久久精品tv| 国产一区二区三区中文字幕| 欧美另类高清videos| 精品精品国产毛片在线看| 成人在线观看黄| 一色桃子久久精品亚洲| www.av日韩| 91av国产在线| 日本电影一区二区| 妖精视频在线观看| 欧美日韩国产精品一区二区三区四区 | 日韩xxxx视频| 国产三级一区二区三区| 国产乱淫a∨片免费视频| 久久久久久久久亚洲| 国产成人ay| 国产精品久久久久久久99| 精品久久久久久久久久久久| 日韩精品毛片| 精品一区二区三区视频日产| 日本午夜一区二区| 男人的天堂久久久| 亚洲男人天天操| 日韩第一区第二区| 欧美黄色一级片视频| 亚洲欧美另类久久久精品2019| 色网站免费观看| 国产在线观看91精品一区| 一本色道久久综合亚洲精品高清| 免费成人深夜蜜桃视频| 精品国产91久久久久久久妲己| 写真福利精品福利在线观看| 日韩精品福利片午夜免费观看| 久久毛片高清国产| 亚洲精品18p| 91精品国产综合久久久久久蜜臀| 国产精品女主播一区二区三区| 免费看一级大片|