Linux——消息隊列

目錄

一、消息隊列的定義

二、相關函數?

2.1 msgget?函數

2.2 msgsnd 函數

2.3 msgrcv 函數

2.4 msgctl 函數

三、消息隊列的操作

?3.1 創建消息隊列

3.2 獲取消息隊列并發送消息?

3.3?從消息隊列接收消息recv?

四、 刪除消息隊列

4.1 ipcrm

4.2?msgctl函數?


一、消息隊列的定義

消息隊列是一種用于在應用程序之間傳遞和存儲數據的通信機制。它允許應用程序將消息發送到隊列中,然后由另一個應用程序從隊列中接收和處理這些消息。消息隊列可以有效地實現異步通信、解耦應用程序之間的依賴關系,以及實現消息的持久化和順序處理。常見的消息隊列系統包括RabbitMQ、Kafka、ActiveMQ等。消息隊列在現代分布式系統和微服務架構中被廣泛應用。

二、相關函數?

2.1 msgget?函數

msgget()創建或者獲取一個消息隊列

函數模型:

int msgget(key_t key,int msqflg);

函數參數:

? ? ? ? 1.msqflg: IPC_CREAT

返回值:
???????? msgget()成功返回消息隊列 ID,失敗返回-1

2.2 msgsnd 函數

函數模型:

int msgsnd(int msqid, const void *msqp, size_t msqsz, int msqflg);
msgsnd()發送一條消息,消息結構為:
struct msgbuf
{
????????long mtype; // 消息類型, 必須大于 0
????????char mtext[1]; // 消息數據
}
函數參數:
??????? ?1.msqsz: 指定 mtext 中有效數據的長度
? ? ? ? 2.msqflg:一般設置為 0 可以設置 IPC_NOWAIT
返回值:
????????msgsnd()成功返回 0, 失敗返回-1

2.3 msgrcv 函數

msgrcv() 接收一條消息

函數模型:

ssize_t msgrcv(int msqid, void *msgp, size_t msqsz, long msqtyp, int msqflg);

函數參數:

???????? 1.msqtyp: 指定接收的消息類型,類型可以為 0
? ? ? ? 2.msqflg: 一般設置為 0 可以設置 IPC_NOWAIT
返回值:
???????? msgrcv()成功返回 mtext 中接收到的數據長度, 失敗返回-1

2.4 msgctl 函數

msgctl() 控制消息隊列

函數模型:

int msgctl(int msqid, int cmd, struct msqid_ds *buf);

?函數參數:

? ? ? ? cmd: IPC_RMID
返回值:
????????msgctl()成功返回 0,失敗返回-1

三、消息隊列的操作

?3.1 創建消息隊列

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/msg.h>int main()
{int msgid=msgget((key_t)1234,IPC_CREAT|0600);if(msgid==-1){printf("msgid err\n");exit(1);}}

通過ipcs 命令查看是否已經創建好了消息隊列

3.2 獲取消息隊列并發送消息?

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/msg.h>struct mess
{long type;char buff[32];
};int main()
{int msgid=msgget((key_t)1234,IPC_CREAT|0600);if(msgid==-1){printf("msgid err\n");exit(1);}struct mess dt;dt.type=1;//1類型消息strcpy(dt.buff,"hello1");msgsnd(msgid,(void*)&dt,32,0);}

?ipcs -q 只顯示消息隊列

?ipcs -m 只顯示共享內存

?ipcs -s 只顯示信號量

msgsnd 函數 發送消息:
msgsnd(msgid, &dt, 32, 0); 使用 msgsnd 函數向消息隊列發送消息。

msgid 是之前通msgget 獲取的消息隊列標識符;

msgid是往哪個消息隊列中添加;
&dt 是指向要發送的消息結構體的指針;
32 是要發送的消息數據的長度;
0 是消息發送的標志,這里使用默認值。

3.3?從消息隊列接收消息recv?

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/msg.h>struct mess
{long type;char buff[32];
};int main()
{int msgid=msgget((key_t)1234,IPC_CREAT|0600);if(msgid==-1){printf("msgid err\n");exit(1);}struct mess dt;msgrcv(msgid,&dt,32,1,0);printf("recv:%s\n",dt.buff);
}

運行此文件,會發現消息隊列數會隨執行的次數增加而減少

并且運行三次之后消息讀完了再運行會堵塞

四、 刪除消息隊列

4.1 ipcrm

刪除消息隊列中的消息用 ipcrm -q msqid 的號。

4.2?msgctl函數?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/msg.h>struct mess 
{long type; char buff[32]; 
};int main() 
{int msgid = msgget((key_t)1234, IPC_CREAT|0600);if (msgid == -1) {printf("msgget err\n");exit(1);}struct mess dt;msgrcv(msgid, &dt, 32, 2, 0);//意思讀2號消息printf("read msg:%s\n", dt.buff);//打印消息msgctl(msgid,IPC_RMID,NULL);
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76047.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76047.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯常考排序

1.逆序 Collections.reverseOrder() 方法對列表進行逆序排序。通過 Collections.sort() 方法配合 Collections.reverseOrder()&#xff0c;可以輕松實現從大到小的排序。 import java.util.ArrayList; // 導入 ArrayList 類&#xff0c;用于創建動態數組 import java.util.C…

ILGPU的核心功能使用詳解

什么是ILGPU? ILGPU 是一種用于高性能 GPU 程序的新型 JIT&#xff08;即時&#xff09;編譯器 &#xff08;也稱為 kernels&#xff09;編寫的 .基于 Net 的語言。ILGPU 完全 用 C# 編寫&#xff0c;沒有任何原生依賴項&#xff0c;允許您編寫 GPU 真正可移植的程序。…

金融的未來

1. DeFi的爆發式增長與核心使命 DeFi&#xff08;去中心化金融&#xff09;的使命是重構傳統金融基礎設施&#xff0c;通過區塊鏈技術實現更高的透明度、可訪問性、效率、便利性和互操作性。其增長數據印證了這一趨勢&#xff1a; TVL&#xff08;總鎖定價值&#xff09;爆炸…

在Vue項目中查詢所有版本號為 1.1.9 的依賴包名 的具體方法,支持 npm/yarn/pnpm 等主流工具

以下是 在Vue項目中查詢所有版本號為 1.1.9 的依賴包名 的具體方法&#xff0c;支持 npm/yarn/pnpm 等主流工具&#xff1a; 一、使用 npm 1. 直接過濾依賴樹 npm ls --depth0 | grep "1.1.9"說明&#xff1a; npm ls --depth0&#xff1a;僅顯示直接依賴&#xf…

其利天下即將亮相第21屆(順德)家電電源與智能控制技術研討會

2025年4月25日&#xff0c;第21屆&#xff08;順德&#xff09;家電電源與智能控制技術研討會即將拉開帷幕&#xff0c;其利天下應大比特之邀&#xff0c;確認將參加此次研討會。 本次研討會&#xff0c;我司委派研發總監馮建武先生圍繞《重新定義風扇驅動&#xff1a;一套算法…

阿里云OSS

目錄 第三方服務-通用思路 SDK 準備工作 阿里云OSS-入門程序 .putObject 如何拿到文件對應的字節數組&#xff1f; .readAllBytes&#xff08;&#xff09; 集成阿里云OSS完成文件上傳 引入阿里云OSS文件上傳的工具類 上傳文件接口開發 .getOriginalFilename() 程序…

李宏毅NLP-4-語音識別part3-CTC

Connectionist Temporal Classification&#xff5c;CTC 基于連接主義時間分類&#xff08;CTC&#xff09;的語音識別架構&#xff0c;具體描述如下&#xff1a; 輸入層&#xff1a;底部的 x 1 , x 2 , x 3 , x 4 x^1, x^2, x^3, x^4 x1,x2,x3,x4代表輸入的語音信號分幀數據…

如何構建類似云數據倉庫 Snowflake 的本地數據倉庫?

目錄 一、Snowflake 架構的三大核心價值 二、本地數據倉庫要“像 Snowflake”&#xff0c;關鍵在數據服務化 三、SQL2API&#xff1a;本地數據服務共享的核心引擎 ? 什么是 SQL2API&#xff1f; ? 為什么是構建本地類 Snowflake 架構的關鍵&#xff1f; 四、QuickAPI&a…

設計模式 - 單例模式

一個類不管創建多少次對象&#xff0c;永遠只能得到該類型一個對象的實力 常用到的&#xff0c;比如日志模塊&#xff0c;數據庫模塊 餓漢式單例模式&#xff1a;還沒有獲取實例對象&#xff0c;實例對象就已經產生了 懶漢式單例模式&#xff1a;唯一的實例對象&#xff0c;…

【Windows Cmake工程配置Boost庫】

Windows Cmake工程配置Boost庫 背景配置流程1. 下載Boost庫2. 配置環境變量3. 修改CmakeLists背景 Windows環境下使用cmake開發程序,如圖需要用到boost庫,但是從官網下載的boost庫源碼沒有編譯成功,于是從網上下載boost預編譯庫,直接配置。 配置流程 1. 下載Boost庫 官…

長期堅持的本質,看重休息,看輕自律

01 你有沒有這樣的經歷&#xff0c; 年初立下減肥20斤、讀完100本書、旅行10次等目標&#xff0c; 年中發現進度太慢&#xff0c; 于是降低年初目標&#xff0c; 但年終完成度仍然不及格。 只好跨年時將希望寄托于來年&#xff0c; 明年復明年&#xff0c;明年何其多。 …

Python實現貪吃蛇三

上篇文章Python實現貪吃蛇一&#xff0c;實現了一個貪吃蛇的基礎版本。后面第二篇文章Python實現貪吃蛇二修改了一些不足&#xff0c;但最近發現還有兩點需要優化&#xff1a; 1、生成食物的時候有概率和記分牌重合 2、游戲缺少暫停功能 先看生成食物的時候有概率和記分牌重合的…

LSTM概述

一、LSTM的背景與動機 1.1 為什么需要LSTM? 在深度學習中,普通的神經網絡(如全連接網絡或卷積神經網絡)在處理序列數據時表現不佳,因為它們無法捕捉數據中的時間依賴關系。循環神經網絡(RNN)被設計來處理序列數據,通過隱藏狀態在時間步之間傳遞信息。然而,傳統RNN存…

DDS信號發生器設計

一、基本概述 1.1 DDS簡介 DDS信號發生器即直接數字頻率合成&#xff08;Direct Digital Frequency Synthesis&#xff0c;簡稱DDS&#xff09;是一種利用數字技術生成信號的方法。它通過數字信號處理技術&#xff0c;將數字信號轉換為模擬信號&#xff0c;從而生成高質量的正…

生成式AI:如何用大模型呼叫系統提升銷售轉化率?

生成式AI技術正以驚人的速度重塑商業版圖。從智能助手到自動化營銷&#xff0c;從數據分析到客戶洞察&#xff0c;生成式AI正在顛覆傳統商業模式&#xff0c;云蝠智能以大模型、智能體為核心技術,致力于為百萬企業提供語音互動智能體平臺與解決方案&#xff0c;為企業在銷售轉化…

OOP丨《Java編程思想》閱讀筆記Chapter 6 : 訪問權限控制

《Java編程思想》Chapter 6 : 訪問權限控制 1. 前言 1.1. 訪問權限控制的等級1.2. package關鍵字的引入 2. 包&#xff1a;庫單元 2.1. 代碼組織2.2. 包名的創建 3. Java訪問權限修飾詞 3.1. 包訪問權限3.2. public: 接口訪問權限3.3. private: 你無法訪問3.4. protected: 繼承…

reconic 天空 模型

目錄 推理代碼&#xff1a; EnvLight 代碼&#xff1a; 推理代碼&#xff1a; sky_model self.models["Sky"]outputs["rgb_sky"] sky_model(image_info)outputs["rgb_sky_blend"] outputs["rgb_sky"] * (1.0 - outputs["opa…

從服務器多線程批量下載文件到本地

1、客戶端安裝 aria2 下載地址&#xff1a;aria2 解壓文件&#xff0c;然后將文件目錄添加到系統環境變量Path中&#xff0c;然后打開cmd&#xff0c;輸入&#xff1a;aria2c 文件地址&#xff0c;就可以下載文件了 2、服務端配置nginx文件服務器 server {listen 8080…

C++ | 可變模板參數

1. 為什么需要可變模板參數&#xff1f; 在C11之前&#xff0c;若想實現一個接受任意數量參數的函數&#xff0c;只能依賴va_list等C風格可變參數&#xff0c;但這種方式類型不安全且難以調試。例如printf函數&#xff1a; printf("%d %f %s", 10, 3.14, "hel…

【機器學習】每日一講-樸素貝葉斯公式

文章目錄 **一、樸素貝葉斯公式詳解****1. 貝葉斯定理基礎****2. 從貝葉斯定理到分類任務****3. 特征獨立性假設****4. 條件概率的估計** **二、在AI領域的作用****1. 文本分類與自然語言處理&#xff08;NLP&#xff09;****2. 推薦系統****3. 醫療與生物信息學****4. 實時監控…