C++系列十:日常学习-进程间通讯

这篇具有很好参考价值的文章主要介绍了C++系列十:日常学习-进程间通讯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • 前言
  • 介绍
  • 照片:
  • 后续:

前言

V~~~V。

介绍

进程间通讯(Inter-Process Communication,IPC)是操作系统中的一个重要概念,用于不同进程之间的数据传输和交互。有多种方式可以实现进程间通讯,以下是其中一些常见的方式:

  1. 管道(Pipe):管道是一种单向通信方式,通常用于具有父子关系的进程之间。它分为有名管道和无名管道(也称为匿名管道)。有名管道允许不相关的进程之间通信,而无名管道只能用于有共同祖先的进程之间。
  2. 命名管道(FIFO):命名管道是一种有名管道,它允许不相关的进程通过一个命名管道文件进行通信。这种方式通常用于进程之间的跨越多个终端或主机的通信。
  3. 消息队列(Message Queues):消息队列是一种进程间通信的方式,允许多个进程通过发送和接收消息来进行通信。消息队列通常提供一种异步通信的机制,其中进程可以发送消息而无需等待接收方立即响应。
  4. 信号(Signal):信号是一种轻量级的通信方式,用于在进程之间发送简短的通知或事件。例如,一个进程可以向另一个进程发送信号来请求其终止或处理特定事件。
  5. 共享内存(Shared Memory):共享内存允许多个进程访问同一块内存区域,从而实现高效的数据共享。然而,共享内存需要进行同步和互斥以避免数据竞争。
  6. 套接字(Socket):套接字是一种用于网络通信的通用方法,但它也可以用于本地进程间通信。通过套接字,进程可以在不同计算机上或同一计算机上的不同进程之间进行双向通信。
  7. 文件锁(File Locking):文件锁可以用于进程之间的同步和通信。多个进程可以使用文件锁来协调对共享文件的访问,以确保数据的一致性。
  8. 信号量(Semaphore):信号量是一种用于进程间同步的通信机制,通常用于控制多个进程对共享资源的访问。信号量可以用于实现互斥和同。
//管道(Pipe)
//程序一:
#include <iostream>
#include <windows.h>
int main() {
    HANDLE hPipe;
    const char* message = "Hello, Pipe!";
    DWORD bytesWritten;
    std::cout << "Messag";
    // 创建管道
    hPipe = CreateNamedPipe(
        L"\\\\.\\pipe\\MyPipe",  // 管道名称
        PIPE_ACCESS_OUTBOUND,   // 只写管道
        PIPE_TYPE_BYTE,         // 字节类型的管道
        1,                      // 最大管道实例数
        0,                      // 输出缓冲区大小
        0,                      // 输入缓冲区大小
        0,                      // 默认等待时间
        NULL                    // 默认安全属性
    );

    if (hPipe == INVALID_HANDLE_VALUE) {
        std::cerr << "Failed to create pipe. Error code: " << GetLastError() << std::endl;
        return 1;
    }
    // 连接管道
    if (ConnectNamedPipe(hPipe, NULL)) {
        // 向管道写入数据
        WriteFile(hPipe, message, strlen(message), &bytesWritten, NULL);
        std::cout << "Message sent to pipe: " << message << std::endl;
    }
    // 关闭管道
    CloseHandle(hPipe);
    system("pause");
    return 0;
}


//程序二:
#include <iostream>
#include <windows.h>
int main() {
    HANDLE hPipe;
    char buffer[1024];
    DWORD bytesRead;
    // 打开管道
    hPipe = CreateFile(
        L"\\\\.\\pipe\\MyPipe",  // 管道名称
        GENERIC_READ,           // 只读权限
        0,                      // 不共享
        NULL,                   // 默认安全属性
        OPEN_EXISTING,          // 打开已存在的管道
        0,                      // 默认属性
        NULL                    // 无模板文件
    );
    if (hPipe == INVALID_HANDLE_VALUE) {
        std::cerr << "Failed to open pipe. Error code: " << GetLastError() << std::endl;
        return 1;
    }
    // 从管道读取数据
    ReadFile(hPipe, buffer, sizeof(buffer), &bytesRead, NULL);
    buffer[bytesRead] = '\0';
    std::cout << "Received message from pipe: " << buffer << std::endl;
    // 关闭管道
    CloseHandle(hPipe);
    system("pause");
    return 0;
}

照片:

  1. 管道:要先运行程序一。
    C++系列十:日常学习-进程间通讯

后续:

慢慢来,还有没有细究其中的道道。后面在补充吧。文章来源地址https://www.toymoban.com/news/detail-709994.html

到了这里,关于C++系列十:日常学习-进程间通讯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA学习实践之旅——前言及目录

    很早就有在博客中记录技术细节,分享一些自己体会的想法,拖着拖着也就到了现在。毕业至今已经半年有余,随着项目越来越深入,感觉可以慢慢进行总结工作了。趁着2024伊始,就先开个头吧,这篇博客暂时作为汇总篇,记录在这几个月以及之后从FPGA初学者到也算有一定

    2024年02月03日
    浏览(58)
  • 【C++】C++学习前言

    C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(objectoriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。

    2024年03月12日
    浏览(56)
  • 【自制C++深度学习框架】前言

    此GitHub项目是一个初学者的深度学习框架,使用C++编写,旨在为用户提供一种简单、易于理解的深度学习实现方式。以下是本项目的主要特点和功能: 计算图:使用计算图来描述深度学习模型的计算过程,利用计算图将神经网络的计算过程视为一个有向无环图。通过构建计算

    2024年02月07日
    浏览(43)
  • 【C++初阶(一)】学习前言以及命名空间

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C++初阶之路⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习排序知识   🔝🔝 对于复杂的问题,规模较大的程序 需要高度的抽象和建模时 C语言不再适合应用于这种场景 于是在1982年 C++创始人 Bjarne Stroustrup 在C语言

    2024年02月11日
    浏览(53)
  • 【C++初阶】前言——C++的发展简述及学习方法分享

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 ====

    2024年02月08日
    浏览(63)
  • 【C++初阶(一)】学习前言 命名空间与IO流

    本专栏内容为:C++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C++ 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 C++是基于C语言而产生的,它既可以进行C语言的

    2024年02月08日
    浏览(97)
  • 《Git入门实践教程》前言+目录

    版本控制系统(VCS)在项目开发中异常重要,但和在校大学生的交流中知道,这个重要方向并未受到重视。具备这一技能,既是项目开发能力的体现,也可为各种面试加码。在学习体验后知道,Git多样化平台、多种操作方式、丰富的资源为业内人士提供了方便的同时,也造成

    2024年02月10日
    浏览(72)
  • Jmeter系列-环境部署、详细介绍、安装目录介绍(1)

    http://jmeter.apache.org/下载最新版本的 JMeter,解压文件到任意目录 1、下载(注意选择操作系统对应的位数32/64) 官网 :http://www.oracle.com 2、安装(一键式) ,所有步骤选择项默认选择项。 3、配置环境变量 JAVA_HOME=JDK完整安装路径 环境变量Path添加:%JAVA_HOME%bin;%JAVA_HOME%jrebin;

    2024年02月09日
    浏览(44)
  • RK3568平台开发系列讲解(Linux系统篇)Linux 目录结构介绍

    🚀返回专栏总目录 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们从目录管理入手,会更直观的理解 linux 的目录结构。 Linux 整个文件系统是以“ / ”目录开始,根目录是最顶层,前面讲根目录和家目录概念的时候已经提到了。它下边包括众多的目录,这些

    2023年04月13日
    浏览(62)
  • STC15系列单片机学习4:串口通讯

    在使用单片机的串口前,得先知道所使用的单片机有几个串口,再结合你的硬件电路图来使用哪个串口。 以下是STC15各系列单片机的串口数量,STC15W4K32S4系列有4个串口 工作模式0:同步移位寄存器(官方建议初学者不学) 工作模式1:8位串口,波特率可变 工作模式2:9位串口

    2024年04月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包