进程间的通讯实现(IPC)的11种方法

进程间通信—IPC(InterProcess Communication) 进程间通信 阅读详情
进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:
       一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方
      另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址 空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏的,并不能被正在运行的线程访问。
   为了能在两个进程之间进行通讯,由以下几种方法可供参考:

0。剪贴板Clipboard: 在16位时代常使用的方式,CWnd中提供支持

1。窗口消息 标准的Windows消息以及专用的WM_COPYDATA消息 SENDMESSAGE()接收端必须有一个窗口

2。使用共享内存方式(Shared Memory)
   a.设定一块共享内存区域          
     HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD,  LPCSTR)
     产生一个file-mapping核心对象
     LPVOID MapViewOfFile(
         HANDLE hFileMappingObject,
         DWORD  dwDesiredAcess,
         DWORD  dwFileOffsetHigh,
         DWORD  dwFileOffsetLow,
         DWORD  dwNumberOfBytesToMap
     );
    得到共享内存的指针
   b.找出共享内存
    决定这块内存要以点对点(peer to peer)的形式呈现
        每个进程都必须有相同的能力,产生共享内存并将它初始化。每个进程
        都应该调用CreateFileMapping(),然后调用GetLastError().如果传回的
        错误代码是ERROR_ALREADY_EXISTS,那么进程就可以假设这一共享内存区         域已经被别的进程打开并初始化了,否则该进程就可以合理的认为自己 排在第          一位,并接下来将共享内存初始化。
    还是要使用client/server架构中
       只有server进程才应该产生并初始化共享内存。所有的进程都应该使用

HANDLE OpenFileMapping(DWORD dwDesiredAccess,
                                   BOOL bInheritHandle,
                                   LPCTSTR lpName);
        再调用MapViewOfFile(),取得共享内存的指针
   c.同步处理(Mutex)
   d.清理(Cleaning up) BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);
                        CloseHandle()

3。动态数据交换(DDE)通过维护全局分配内存使的应用程序间传递成为可能
   其方式是再一块全局内存中手工放置大量的数据,然后使用窗口消息传递内存    指针.这是16位WIN时代使用的方式,因为在WIN32下已经没有全局和局部内存    了,现在的内存只有一种就是虚存。  

4。消息管道(Message Pipe)
   用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序
   访问一个平面文件一样读写数据。
   匿名管道(Anonymous Pipes)
       单向流动,并且只能够在同一电脑上的各个进程之间流动。
   命名管道(Named Pipes)
       双向,跨网络,任何进程都可以轻易的抓住,放进管道的数据有固定的格        式,而使用ReadFile()只能读取该大小的倍数。
       可以被使用于I/O Completion Ports

5   邮件槽(Mailslots)
    广播式通信,在32系统中提供的新方法,可以在不同主机间交换数据,在        WIN9X下只支持邮件槽客户

6。Windows套接字(Windows Socket)
   它具备消息管道所有的功能,但遵守一套通信标准使的不同操作系统之上的应    用程序之间可以互相通信。

7。Internet通信 它让应用程序从Internet地址上载或下载文件

8。RPC:远程过程调用,很少使用,因其与UNIX的RPC不兼容。

9。串行/并行通信(Serial/Parallel Communication)
   它允许应用程序通过串行或并行端口与其他的应用程序通信

10。COM/DCOM
     通过COM系统的代理存根方式进行进程间数据交换,但只能够表现在对接口     函数的调用时传送数据,通过DCOM可以在不同主机间传送数据。 
进程间通信详解 进程间通信详解(命名管道,匿名管道,共享内存) 阅读详情

相关推荐

delphi 接收进程消息机制

delphi 接收进程消息机制 时刻监控消息的到来,并且接受任何类型数据

进程间通信(IPC)

什么是进程间通信 首先了解几个名词: 进程隔离 进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术。这个技术是为了避免进程A写入进程B的情况发生。 进程的隔离实现,使用了虚拟地址空间。进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A将数据信息写入进程B。 为什么需要进程间通信 1).数据传输 一个进程需要将它的数据发送给另一个进程。 2).资源共享 多个进程之间共享同样的资源。 3).通知事件 一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。 4).进程

weixin_49001476的博客 8188

delphi中判断子窗体是否打开

delphi中判断子窗体是否打开delphi中判断子窗体是否打开

进程间的通讯实现(IPC)的11种方法 (转)

进程间的通讯实现(IPC)的11种方法 (转)[@more@]进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: 一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方 另一个是地...

csd3176的博客 141

.NET和Delphi通过命名管道进行进程间通信

通过标准Windows命名管道从.NET应用程序调用本机方法

[Github]GitHub 2FA快速安全配置全攻略

GitHub强制要求用户启用双重身份验证(2FA)以提升代码安全。本文详细介绍了2FA的三种实现方式:TOTP应用验证(推荐)、SMS短信验证(备用)和硬件安全密钥(最安全),并提供了配置指南。特别推荐使用在线工具2FA.run快速测试TOTP功能。文章还涵盖恢复代码管理、企业级2FA策略制定以及常见问题解决方案,如时间同步问题、多设备同步等。通过强制2FA、定期审计和建立安全事件响应流程,开发者可构建更安全的代码管理体系。

冰茶的博客 2626

IPC(进程间通信方式的介绍)

进程间通信(IPC)介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。 IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 以Linux中的C语言编程为例。 一、管道 管道,通常指无名管道,是 UNI...

qq_34144916的博客 5万+

TBOX(Telematics Box)在智能网联汽车中的核心功能与应用场景解析

TBOX(Telematics Box)是智能网联汽车的“中枢神经”,基于Android或Linux操作系统,并通过CAN总线与车辆深度交互。它实现了远程控制、车辆状态监控、OTA升级及紧急呼叫(E-CALL)等核心功能,是提升用车安全、便利性与实现车辆持续进化的关键技术组件。

weixin_29158413的博客 805

QT进程间通讯

Qt提供了几种在Qt应用程序中实现进程间通信(IPC)的方式。 通过消息进行传递 通过向指定的进程传递消息事件的方式进行通信。QT是通过nativeEvent()函数来捕获window系统发送过来的消息。 windows上的应用例程:https://blog.youkuaiyun.com/u012719076/article/details/122975520 TCP / IP 跨平台的Qt网络模块提供了使网络编程可移植且容易的类。它提供了使用特定的应用程序级协议进行通信的高层类(例如QNetworkAccessMan

juebukeni的博客 2041

为什么Nano Banana在图像一致性上碾压GPT和豆包?深度解析其技术原理与使用技巧

本文深度解析了Nano Banana在图像一致性上超越GPT和豆包等工具的技术原理。它通过基于参考图的强条件生成、精准的区域感知与掩码控制等核心技术,实现了“外科手术式”的精准图像编辑。文章还分享了包括提示词工程、参数调整在内的实用技巧,并探讨了通过API Key将其能力集成到自动化工作流中的潜力。

omega的博客 358

Ansys Zemax与Speos协同设计:从HUD光学优化到驾驶环境可视化全流程解析

本文深入解析了如何利用Ansys Zemax与Speos进行协同设计,实现从HUD光学系统核心优化到驾驶环境可视化验证的全流程。文章强调了HUD设计是光学性能与视觉感知的深度耦合,通过Zemax进行精密光学设计,再利用Speos进行系统级仿真与感知模拟,最终完成从虚拟到现实的闭环验证,有效提升HUD产品的开发效率与可靠性。

weixin_29199873的博客 251

进程间通讯_IPC

信号量:信号量是实现进程间同步的方式,这个信号量又叫信号灯集。在一个信号量中可以包含很多的信号灯,信号灯之间相互不干扰。问:上述的程序能够保证读写的顺序?如果没有执行写,先向执行读的现象?答:上述的共享内存在没有执行写的时候,执行读是不会阻塞的,所以如果向。看到现象就必须先执行写,在执行读,上述的代码遵从生产者消费者模型,必。答:存在,直到下一次写覆盖掉,或者删除共享内存这些数据才消失。ipcs 查看所有的信息(消息队列,共享内存,信号量)问:共享内存的数据读取后还存在吗?注:这里的ID并不是key。

KnowHowNewhaoran的博客 399

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7750

c#进程间通讯方案之IPC通道

转载:http://www.cnphp.info/csharp-ipc-channel-remoting.html 最近一直纠结与使用多进程还是多线程来构建程序。多线程的方法似乎不错,但是一个进程可承受的线程数有有限的,并且由于每个线程都与UI有着些许关系,线程的工作大多数时间浪费在阻塞上了,效率实在不是很高。 笔者遂在google上搜索进程间通讯的方案。发现有很多种,其中IPC通道似乎是个...

weixin_53370274的博客 74

深入理解SQL注入中的union select 1,2,3....

UNION 用于合并两个查询的结果集

渗透之路,攻防之间皆学问 2万+

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

伶俐角少儿编程 487
上一篇: DLL的调试
下一篇: linux内核裁减
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值