C++進程間通信 消息隊列

C++進程間通信 消息隊列

    • 消息隊列概述
    • 消息隊列代碼示例
      • 1. 創建和發送消息的程序(sender.cpp)
      • 2. 接收消息的程序(receiver.cpp)
    • 代碼解釋
    • 運行步驟
    • 運行結果

消息隊列概述

消息隊列是一種進程間通信機制,允許一個或多個進程通過消息的形式進行通信。消息隊列可以在內核中維護,提供了一個先進先出的隊列,支持消息的優先級排序。

消息隊列代碼示例

1. 創建和發送消息的程序(sender.cpp)

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <iostream>
#include <cstring>
#include <cstdlib>#define MSGQ_KEY 1234
#define MSG_SIZE 128struct message 
{long msg_type;char msg_text[MSG_SIZE];
};int main() 
{int msgid = msgget(MSGQ_KEY, 0666 | IPC_CREAT);  // 創建消息隊列if (msgid == -1) {perror("msgget");exit(EXIT_FAILURE);}message msg;msg.msg_type = 1;  // 消息類型strcpy(msg.msg_text, "Hello from sender process!");  // 消息內容if (msgsnd(msgid, &msg, sizeof(msg.msg_text), 0) == -1) {  // 發送消息perror("msgsnd");exit(EXIT_FAILURE);}std::cout << "Message sent: " << msg.msg_text << std::endl;return 0;
}

2. 接收消息的程序(receiver.cpp)

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <iostream>
#include <cstring>
#include <cstdlib>#define MSGQ_KEY 1234
#define MSG_SIZE 128struct message 
{long msg_type;char msg_text[MSG_SIZE];
};int main() 
{int msgid = msgget(MSGQ_KEY, 0666 | IPC_CREAT);  // 獲取消息隊列if (msgid == -1) {perror("msgget");exit(EXIT_FAILURE);}message msg;if (msgrcv(msgid, &msg, sizeof(msg.msg_text), 1, 0) == -1) {  // 接收消息perror("msgrcv");exit(EXIT_FAILURE);}std::cout << "Message received: " << msg.msg_text << std::endl;if (msgctl(msgid, IPC_RMID, nullptr) == -1) {  // 刪除消息隊列perror("msgctl");exit(EXIT_FAILURE);}return 0;
}

代碼解釋

  1. 創建和發送消息的程序(sender.cpp)

    • msgget(MSGQ_KEY, 0666 | IPC_CREAT): 創建一個消息隊列,如果消息隊列不存在則創建,否則獲取現有的消息隊列。
    • 定義一個message結構,包含消息類型和消息文本。
    • 設定消息類型并賦值消息文本。
    • msgsnd(msgid, &msg, sizeof(msg.msg_text), 0): 發送消息到消息隊列。
    • 打印發送的消息。
  2. 接收消息的程序(receiver.cpp)

    • msgget(MSGQ_KEY, 0666 | IPC_CREAT): 獲取消息隊列。
    • 定義一個message結構,包含消息類型和消息文本。
    • msgrcv(msgid, &msg, sizeof(msg.msg_text), 1, 0): 從消息隊列接收類型為1的消息。
    • 打印接收到的消息。
    • msgctl(msgid, IPC_RMID, nullptr): 刪除消息隊列。

運行步驟

  1. 分別編譯sender.cppreceiver.cpp
    g++ sender.cpp -o sender
    g++ receiver.cpp -o receiver
    
  2. 打開兩個終端,在第一個終端運行接收程序:
    ./receiver
    
  3. 在第二個終端運行發送程序:
    ./sender
    

運行結果

第一個終端(運行接收程序)輸出:

Message received: Hello from sender process!

第二個終端(運行發送程序)輸出:

Message sent: Hello from sender process!

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

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

相關文章

Django 做migrations時出錯,解決方案

在做migrations的時候&#xff0c;偶爾會出現出錯。 在已有數據的表中新增字段時&#xff0c;會彈出下面的信息 運行這個命令時 python manage.py makemigrationsTracking file by folder pattern: migrations It is impossible to add a non-nullable field ‘example’ to …

Linux---網絡相關配置

文章目錄 前言一、pandas是什么&#xff1f;二、使用步驟 1.引入庫2.讀入數據總結 前言 一臺主機需要配置必要的網絡信息&#xff0c;才可以連接到互聯網&#xff0c;需要的配置網絡信息包括IP&#xff0c;子網掩碼&#xff0c;網關和DNS。 一.查看網絡信息 查看IP信息可以通…

echarts高級應用

目錄 一、顯示相關 1.1、主題 1.1.1、內置主題 1.1.2、自定義主題 1.2、調色盤和顏色漸變 1.2.1、主題調色盤<全局調色盤<局部調色盤 1.2.2、線性漸變(linear)、徑向漸變(radial) 1.3、直接樣式和高亮樣式 1.3.1、直接樣式 1.3.2、高亮樣式 1.4、圖表自適應 …

Fine-tuning和模型訓練的關系

概述 Fine-tuning和模型訓練不是完全相同的概念&#xff0c;但它們之間有密切的關系&#xff0c;都是機器學習和深度學習過程中的重要步驟。 模型訓練是一個更廣泛的概念&#xff0c;指的是使用數據去調整模型的內部參數&#xff0c;以使得模型能夠從輸入數據中學習并做出預測…

軟件架構設計屬性之三:結構性屬性淺析

文章目錄 引言一、結構性屬性的定義二、結構性屬性的關鍵要素1. 組件化2. 模塊化3. 層次化4. 接口定義5. 數據流6. 依賴管理 三、結構性屬性的設計原則1. 高內聚低耦合2. 松耦合3. 清晰的接口4. 可維護性5. 可擴展性 四、結構性屬性的實現策略1. 組件劃分2. 模塊化設計3. 接口設…

【AREngine BUG 解決方法】無法獲取有效的相機圖像尺寸

近期拿了一臺 華為mate20 Pro的手機&#xff0c;在運行AR示例的過程中出現了黑屏。 問題排查 SDK版本&#xff1a;com.huawei.hms:arenginesdk:3.7.0.3 定位 經排查&#xff0c;發現(ARCamera對象的相機內參) getImageDimensions()返回的圖像尺寸的width和height都為0。 這…

Kong api網關實戰教程

1. kong介紹 Kong是一款基于OpenResty(NginxLua模塊)編寫的高可用、易擴展的&#xff0c;由Mashape公司開源的API Gateway項目。Kong是基于NGINX和Apache Cassandra或PostgresQL構建的&#xff0c;能據供易于使用的RSTTAP[來操作和配置API管理系統&#xff0c;所以它可以水平擴…

【上】王樹森《小紅書推薦系統公開課》- 課程筆記(推薦系統基礎、召回、排序)

寫在前面 本文為王樹森老師《小紅書推薦系統公開課》的課程筆記 課程來源&#xff1a;ShusenWang的個人空間-ShusenWang個人主頁-嗶哩嗶哩視頻 (bilibili.com)課程資料&#xff1a;GitHub - wangshusen/RecommenderSystem 由于篇幅較長&#xff0c;分為【上】【下】兩篇文章…

C#中的比較和邏輯運算符

在C#編程中&#xff0c;比較和邏輯運算符是控制程序流程和執行條件判斷的重要工具。以下是C#中一些常用的比較和邏輯運算符及其示例。 相等運算符 運算符用于比較兩個值是否相等。如果相等&#xff0c;返回 true&#xff1b;否則返回 false。 示例 int a 5, b 5; bool is…

【busybox記錄】【shell指令】unlink

目錄 內容來源&#xff1a; 【GUN】【unlink】指令介紹 【busybox】【unlink】指令介紹 【linux】【unlink】指令介紹 使用示例&#xff1a; 刪除文件 - 默認 常用組合指令&#xff1a; 指令不常用/組合用法還需繼續挖掘&#xff1a; 內容來源&#xff1a; GUN &#x…

深入解析Web前端三大主流框架:Angular、React和Vue

Web前端三大主流框架分別是Angular、React和Vue。下面我將為您詳細介紹這三大框架的特點和使用指南。 Angular 核心概念: 組件(Components): 組件是Angular應用的構建塊,每個組件由一個帶有裝飾器的類、一個HTML模板、一個CSS樣式表組成。組件通過輸入(@Input)和輸出(…

【OrangePi AIpro】開箱初體驗以及OAK深度相機測試

1. 簡介 Orangepi AIPRO 是一款采用昇騰AI技術路線&#xff0c;集成4核64位處理器AI處理器的單板計算機&#xff0c;集成圖形處理器&#xff0c;支持8TOPS AI算力&#xff0c;擁有8GB/16GB LPDDR4X&#xff0c;可以外接eMMC模塊&#xff0c;支持雙4K高清輸出。 Orange Pi AIpr…

VirtualDisplay圖像數據流trace分析

1. 計算器App更新圖像幀&#xff08;QueuedBuffer - ViewRootImpl[Calculator]#0BLAST#0&#xff09;&#xff0c;調用eglSwapBuffersWithDamageKHR&#xff0c;然后queueBuffer向surfaceflinger提交圖像buffer 2. sf調用latchBuffer獲取buffer&#xff0c;進行一些狀態的處理…

CBK-D2-安全與架構工程.md

CBK-D2-安全與架構工程 密碼學和對稱密鑰算法 密碼通信的基礎知識 明文P-plaintext、加密encrypt、密文C-ciphertext、解密decrypt、密鑰Key 多數情況下,密鑰無非是一個極大的二進制數 每一種算法都有一個特定密鑰控制key space,是一個特定的數值范圍 密鑰空間由位大小b…

數字圖像處理系列 | 線性濾波(高斯濾波)(3)

我們知道了什么是 線性平移不變系統是在做卷積操作 之后&#xff0c;我們發展出了一些非常簡單的 線性濾波&#xff0c; 去增強圖片&#xff0c;提取圖片特征 文章目錄 1. 卷積如何在離散圖片中工作的Vis 原圖和mask做卷積時發生了什么首先&#xff0c;如何得到 (i.j)位置的卷積…

操作系統中的內存管理

虛擬內存 操作系統會提供一種機制&#xff0c;將不同進程的虛擬地址和不同內存的物理地址映射起來。如果程序要訪問虛擬地址的時候&#xff0c;由操作系統轉換成不同的物理地址&#xff0c;這樣不同的進程運行的時候&#xff0c;寫入的是不同的物理地址&#xff0c;這樣就不會沖…

Python 技能提升(一)

python注釋規范 # Add commit for you codes. # The proper addition of comments is so beautiful.from abc import abstractmethoddef add(a: int, b: int) -> int:# You can write some necessary notes here.# Such as the role of functions, the types and roles of …

Slurm集群使用基礎

Introduction 我們在做生物信息分析時&#xff0c;對于大規模的上游數據的處理&#xff0c;一般需要在大型服務器或集群上進行。我最早接觸并使用的是一個基于SLURM調度系統的集群&#xff0c;在此記錄一下基礎使用方法。 高性能計算集群&#xff08;High-Performance Comput…

React 使用JSX或者TSX渲染頁面

02 Rendering with JSX Your first JSX content In this section, we’ll implement the obligatory " Hello, World " JSX application. At this point, we’re just dipping our toes in the water; more in-depth examples will follow. We’ll also discuss wh…

vs code中編寫c++基本使用以及問題總結

vs code基本使用以及總結 launch.json作用 這個文件配置了調試器的設置&#xff0c;允許你定義如何啟動和調試你的程序。這包括配置執行路徑、傳遞給程序的參數、環境變量以及特定語言或框架的調試器選項。 常用配置 "version": "0.2.0": 這是配置文件…