TAT.vorshen window 下 IPC 探索
In 未分类 on 2015年09月28日 by view: 3,861
1

这一片文章技术上基本上都是后台相关的,不过比较浅~可以当做知识扩展来看~

做项目的时候遇到 RPC 通信,就研 zhe 究 teng 了一些相关的玩意,这是背景

注意标题:本文 C 的代码需要在 window 下执行

首先我们得知道什么是 IPC 通信

Inter-Process Communication 翻译过来是进程间通信,进程间通信。进程是什么就不用解释了吧~

有两种类型的进程间通信

1、LPC 本地过程调用

2、RPC 远程过程调用

 

这些调用有什么乱用?

它们可以 数据传输、共享数据、通知事件、资源共享等等

可以看到 IPC 调用还是很重要的,缺之不可

 

那么接下来的问题就是该如何实现 IPC 通信呢?

先说几个常见和通用的

1、管道

2、文件映射

3、共享内存

4、Socket

还有一些不同操作系统下面特有的,比如 window 下的邮件槽,剪切板,动态数据交换,动态链接库

linux 下特有的信号、消息队列、信号量

在这里我们也主要讲前四种~当然我也不会原因是后面的我也没研究~

 

一、管道

netstat -a | grep node

上面这条命令对用过 linux 的童鞋来说应该很熟悉吧,这是 linux 里面的管道符“ | ” 的基本用法,管道的原理是什么呢?看图~

管道是一个内核的缓冲区,它的一端连接一个进程的输出,管道的另一端连接另外一个进程,负责输出,有没有一种抽象的概念了?

管道分为两种,一种是匿名管道,主要用于具有亲缘关系的进程通信,eg:node 中用 fork 或者 exec 创建的新进程

 

代码就不解释了,及其的简单

不过我们从匿名管道中就能感觉到其局限性,必须是亲缘关系的进程才可以通信,命名管道改变了这一点

命名管道的原理是酱紫的:服务器创建一个命名管道对象,然后等待连接,客户端连接,二者可以读写数据