惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tenable Blog
WordPress大学
WordPress大学
小众软件
小众软件
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
T
The Exploit Database - CXSecurity.com
Attack and Defense Labs
Attack and Defense Labs
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
量子位
有赞技术团队
有赞技术团队
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs
S
Schneier on Security
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
F
Full Disclosure
Scott Helme
Scott Helme
GbyAI
GbyAI
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
Hacker News - Newest:
Hacker News - Newest: "LLM"
Security Latest
Security Latest
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
C
Check Point Blog

博客园 - 阿修

Entity FrameWork 单表对多实体 让Entity Framework启动不再效验__MigrationHistory表 Entity Framework搜索指定字段解决方案 Linux+Mono+WebService:CS1703: An assembly with the same identity--mscorlib 获取某年中第几个礼拜的第一天的函数 DataTable.Rows.Remove(row) 与 DataTable.Rows[i].Delete()区别 [转摘]Lucene学习总结之一:全文检索的基本原理 Lucene.net根据Sort走到了不同的类处理 VPN Connections and Default Gateways - 阿修 牛!帮EXE等执行文件压缩的工具 三星I9008删除程序清单 .NET编程中的部分效率问题 质量保证漫漫谈之QA、QC、QM的关系与区别 敏捷宣言 多维角度聊聊结对编程 在Windows下编译和.NET运行MemCached Serv-U服务器中文乱码问题的解决 请小心 管理学中四件不要做的事情
进程通讯的多种方式
阿修 · 2011-08-21 · via 博客园 - 阿修

进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:
              一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方
            另一个是地址空间,它包含所有的可执行模块或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可以在不同主机间传送数据。