色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

消息隊列實現進程間通訊

嵌入式應用開發 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-12-29 16:52 ? 次閱讀

創建消息隊列

消息隊列的創建,需要用到msgget函數。

int msgget(key_t key, int msgflg);

key:該參數是消息隊列的唯一標識,由ftok生成。
msgflg:取值有以下幾個選擇:IPC_CREAT、IPC_EXCL ,這兩個參數詳細的作用可以man msgflg看詳細介紹。

返回值:返回一個近乎唯一的Message queue id

我們可以指定一個文件,調用ftok ,它會根據這個文件的 inode,生成一個近乎唯一的 key。

key_t ftok(const char *pathname, int proj_id);


pathname:文件信息,必須指定在一個存在的,可訪問的文件。
proj_id:8bit的數據,0-255隨意設定。

這樣就可以獲得一個近乎唯一的key了!

只要在這個消息隊列的生命周期內,這個文件不要被刪除就可以了。只要不刪除,無論什么時刻,再調用 ftok,也會得到同樣的 key。

綜上,創建一個消息隊列只需兩步:

①:ftok生成一個key

②:msgget生成一個消息隊列的ID

如下:

int main() {
  int messagequeueid;
  key_t key;
 
 
  if((key = ftok("/root/messagequeue/messagequeuekey", 1)) < 0)
  {
      perror("ftok error");
      exit(1);
  }
 
 
  printf("Message Queue key: %d.n", key);
 
 
  if ((messagequeueid = msgget(key, IPC_CREAT|0777)) == -1)
  {
      perror("msgget error");
      exit(1);
  }
 
 
  printf("Message queue id: %d.n", messagequeueid);
}

ftok要指定一個存在的文件,所以我們在執行之前,需要創建該文件。
查看消息隊列:

System V IPC 體系有一個統一的命令行工具:ipcmk,ipcs 和 ipcrm 用于創建、查看和刪除 IPC 對象。

查看創建的IPC對象:ipcs -q
dong@ubuntu:~//Interprocess_Communication$ ipcs
------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    
0x01110005 0          dong       777        0            0          
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
------ Semaphore Arrays --------
key        semid      owner      perms      nsems

發送消息
消息隊列發送消息,主要調用msgsnd 函數。


int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
msqid:該參數是msgget所得到的message queue 的 id
msgp:消息結構體
struct msg_buffer {
   long mtype;
   char mtext[1024];
};


msgsz:表示消息結構體中,mtext最大長度。
msgflg:一位掩碼,可取值有:IPC_NOWAIT、MSG_COPY、MSG_EXCEPT、MSG_NOERROR,取值說明可見man msgsnd
接收消息
消息隊列接收消息,主要調用msgrcv 函數。
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
int msgflg);
msqid:該參數是msgget所得到的message queue 的 id
msgp:消息結構體

msgsz:可接收數據最大長度

msgflg:一位掩碼,可取值有:IPC_NOWAIT、MSG_COPY、MSG_EXCEPT、MSG_NOERROR,取值說明可見man msgsnd
有了消息這種模型,兩個進程之間的通信就像咱們平時發郵件一樣,你來一封,我回一封,可以頻繁溝通了。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5085

    文章

    19138

    瀏覽量

    305705
  • 隊列
    +關注

    關注

    1

    文章

    46

    瀏覽量

    10911
  • 進程
    +關注

    關注

    0

    文章

    203

    瀏覽量

    13962
收藏 人收藏

    評論

    相關推薦

    Linux下進程通訊消息隊列

    進行通信。 消息隊列與 FIFO 很相似,都是一個隊列結構,都可以有多個進程隊列里面寫信息,多個進程
    的頭像 發表于 08-19 19:56 ?1838次閱讀
    Linux下<b class='flag-5'>進程</b><b class='flag-5'>通訊</b>消息<b class='flag-5'>隊列</b>

    基于隊列函數實現并行循環傳輸數據

    數據經過入隊列和出隊列兩個函數過程得到傳遞,本程序使用隊列函數,實現兩個并行循環的數據傳遞。循環 1生成的數據通過
    發表于 04-23 09:40

    鴻蒙內核源碼分析(調度隊列篇):進程和Task的就緒隊列對調度的作用

    為何單獨講調度隊列?鴻蒙內核代碼中有兩個源文件是關于隊列的,一個是用于調度的隊列,另一個是用于線程通訊的IPC
    發表于 11-23 11:09

    Linux現有的所有進程IPC方式

    在開始回答前,先簡單概括性地說說Linux現有的所有進程IPC方式:1. **管道:**在創建時分配一個page大小的內存,緩存區大小比較有限;2. 消息隊列:信息復制兩次,額外的CPU消耗
    發表于 08-20 06:17

    怎樣通過匿名管道去實現進程的通信呢

    進程通信是指什么?怎樣通過匿名管道去實現進程的通信呢?有哪些步驟?
    發表于 12-24 06:45

    哪些方式可以實現Linux系統下的進程通信

    哪些方式可以實現Linux系統下的進程通信?進程與線程有哪些不同之處呢?
    發表于 12-24 06:38

    OpenHarmony進程是如何傳遞大數據的

    (OsQueueDbgInitHook() != LOS_OK) {//調試隊列使用的.return LOS_ERRNO_QUEUE_NO_MEMORY;}return LOS_OK;}總結:消息隊列解決任務大數據的傳遞,以
    發表于 05-23 17:13

    RT-thread內核之進程通信設計實現

    1、RT-thread內核之進程通信特性及使用場合介紹  rt-thread操作系統的IPC(Inter-ProcessCommunication,進程同步與通信)包含有中斷鎖、調
    發表于 09-01 15:13

    進程與線程的通信方式

    進程的通信則不同,它的數據空間的獨立性決定了它的通信相對比較復雜,需要通過操作系統。以前進程的通信只能是單機版的,現在操作系統都繼承了基于套接字(socket)的
    的頭像 發表于 04-09 15:58 ?8933次閱讀
    <b class='flag-5'>進程</b><b class='flag-5'>間</b>與線程<b class='flag-5'>間</b>的通信方式

    使用MQTT作為進程通信的方式

    小編對Linux這一塊的實際開發經驗雖然還不是很足,但也知道進程通信有那么幾種方式:管道、消息隊列、共享內存、套接字等。
    的頭像 發表于 10-22 12:09 ?6193次閱讀
    使用MQTT作為<b class='flag-5'>進程</b><b class='flag-5'>間</b>通信的方式

    鴻蒙內核源碼分析:進程和Task的就緒隊列對調度的作用

    鴻蒙內核代碼中有兩個源文件是關于隊列的,一個是用于調度的隊列,另一個是用于線程通訊的IPC隊列。 鴻蒙內核
    發表于 11-23 15:48 ?31次下載
    鴻蒙內核源碼分析:<b class='flag-5'>進程</b>和Task的就緒<b class='flag-5'>隊列</b>對調度的作用

    常見的進程通信方式

    關系的進程間使用。進程的親緣關系,通常指父子進程關系。 有名管道: 有名管道也是,半雙工的通信方式,但是它允許無親緣關系進程
    的頭像 發表于 10-08 15:48 ?1360次閱讀
    常見的<b class='flag-5'>進程</b><b class='flag-5'>間</b>通信方式

    進程通信方式總結

    進程通信(IPC): 進程通信的方式有很多,這里主要講到進程通信的六種方式,分別為:管道、
    的頭像 發表于 11-09 09:25 ?772次閱讀
    <b class='flag-5'>進程</b><b class='flag-5'>間</b>通信方式總結

    如何實現一套linux進程通信的機制

    我們知道linux的進程通信的組件有管道,消息隊列,socket, 信號量,共享內存等。但是我們如果自己實現一套進程
    的頭像 發表于 11-10 14:56 ?646次閱讀
    如何<b class='flag-5'>實現</b>一套linux<b class='flag-5'>進程</b><b class='flag-5'>間</b>通信的機制

    進程通信的消息隊列介紹

    消息隊列是一種非常常見的進程通信方式。
    的頭像 發表于 04-08 17:27 ?314次閱讀
    主站蜘蛛池模板: 亚洲高清无在码在线电影| mxgs-877痉挛媚药按摩| 国产成人在线小视频| 亚洲成人免费在线| 久久亚洲精品AV无码四区| 99er4久久视频精品首页| 日韩精品一区二区三区色欲AV | 亚洲国产在线视频中文字| 久久久久久久国产精品视频| chinesevideos原创麻豆| 午夜向日葵视频在线观看| 久久亚洲国产中文字幕| 抽插性奴中出乳精内射| 亚洲日本激情| 欧美日韩第一区| 国偷自产视频一区二区99| 97草碰在线视频免费| 无限资源在线看影院免费观看 | 精品久久久久久久高清| CHINESE熟女老女人HD视频| 亚洲精品无码午夜福利在线观看| 牛牛在线精品视频(正)| 国产自产第一区c国产| ppypp日本欧美一区二区| 亚洲黄色免费在线观看| 人人在线碰碰视频免费| 久久精品国产在热亚洲完整版 | 国内精品久久| 操中国老太太| 在教室伦流澡到高潮H女攻视频| 色噜噜狠狠色综合欧洲| 老女人与小伙子露脸对白| 国产免费阿v精品视频网址| bbw极度另类孕妇| 伊人成色综合人网| 午夜婷婷一夜七次郎| 欧美性猛交xxxxxxxx软件| 久久精品男人影院| 国产午夜精品一区二区理论影院| mxgs-877痉挛媚药按摩| 中文字幕亚洲视频|