windows管道
匿名管道的使用
匿名管道主要用于本地父进程和子进程之间的通信,
在父进程中的话,首先是要创建一个匿名管道,
在创建匿名管道成功后,可以获取到对这个匿名管道的读写句柄,
然后父进程就可以向这个匿名管道中写入数据和读取数据了,
但是如果要实现的是父子进程通信的话,那么还必须在父进程中创建一个子进程,
同时,这个子进程必须能够继承和使用父进程的一些公开的句柄,
为什么呢?
因为在子进程中必须要使用父进程创建的匿名管道的读写句柄,
通过这个匿名管道才能实现父子进程的通信,所以必须继承父进程的公开句柄。
同时在创建子进程的时候,
必须将子进程的标准输入句柄设置为父进程中创建匿名管道时得到的读管道句柄,
将子进程的标准输出句柄设置为父进程中创建匿名管道时得到的写管道句柄。
然后在子进程就可以读写匿名管道了
命名管道的实现:
1.命名管道Server和Client间通信的实现流程
(1)建立连接:服务端通过函数CreateNamedPipe创建一个命名管道的实例并返回用于 今后操作的句柄,或为已存在的管道创建新的实例。如果在已定义超时值变为零以前,有 一个实例管道可以使用,则创建成功并返回管道句柄,并用以侦听来自客户端的连接请求, 该功能通过ConnectNamedPipe函数实现。
另一方面,客户端通过函数WaitNamedPipe使服务进程等待来自客户的实例连接,如 果在超时值变为零以前,有一个管道可以为连接使用,则WaitNamedPipe将返回True,并 通过调用CreateFile或CallNamedPipe来呼叫对服务端的连接。此时服务端将接受客户端 的连接请求,成功建立连接,服务端ConnectNamedPipe返回True,客户端CreateFile将返 回一指向管道文件的句柄。
从时序上讲,首先是客户端通过WaitNamedPipe使服务端的CreateFile在限时时间内 创建实例成功,然后双方通过ConnectNamedPipe和CreateFile成功连接,并返回用以通信 的文件句柄,此时双方即可进行通信。
(2)通信实现:建立连接之后,客户端与服务器端即可通过ReadFile和WriteFile, 利用得到的管道文件句柄,彼此间进行信息交换。
(3)连接终止:当客户端与服务端的通信结束,或由于某种原因一方需要断开时,客 户端应调用CloseFile,而服务端应接着调用DisconnectNamedPipe。当然服务端亦可通 过单方面调用DisconnectNamedPipe终止连接。最后应调用函数CloseHandle来关闭该管道
windows管道的更多相关文章
- (转)Windows管道(Pipe)重定向stdout,stderr,stdin
参考: http://qiusuoge.com/11496.html http://www.cnblogs.com/BoyXiao/archive/2011/01/01/1923828.html st ...
- Golang把所有包括底层类库,输出到stderr的内容, 重新定向到一个日志文件里面?
不论应用是如何部署的,我们都期望能扑捉到应用的错误日志, 解决思路: 自己写代码处理异常拦截,甚至直接在main函数中写异常拦截. stderr重定向到某个文件里 使用 syscall.Dup2 第一 ...
- L脚本语言语法手冊 0.10版
L脚本语言语法手冊 0.10版 简 介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,眼下支持在中文.英文基础上的编程.并可扩展为随意语种.L脚本语言的语法结构简单.程序结构相对 ...
- Windows进程间通信—命名管道
命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节.我们在不了解网络协议的情况下,也可以利用命名管道来实现进程间的通信.与Socket网络通信相比,命名管道不再需要编写身份验证的代码.将 ...
- Windows Azure Cloud Service (41) 修改云服务IIS托管管道模式为4.0经典模式
<Windows Azure Platform 系列文章目录> 这是笔者在之前的项目中遇到的问题,做一下总结,给网友做参考. 在一般情况下,Visual Studio开发的Cloud Se ...
- Windows下 C++ 实现匿名管道的读写操作
由于刚弄C++没多久,部分还不熟练,最近又由于开发需求要求实现与其他程序进行通信,瞬间就感觉想到了匿名通信.于是自己查阅了一下资料,实现了一个可读可写的匿名管道: 源代码大部分都有注释: Pipe.h ...
- windows namedPipe 命名管道clent and server
1.client: #include "iostream" #include "windows.h" using namespace std; void mai ...
- Linux 和 Windows 下实现多进程的方式以及管道操作
一.多进程 1.windows 多进程 使用 #include<windows.h> 下面的 BOOL CreateProcess( LPCWSTR pszImageName, LPCWS ...
- windows命名管道
命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节. 将命名管道作为一种网络编程方案时,它实际上建立了一个C/S通信体系,并在其中可靠的传输数据.命名管道服务器和客户机的区别在于:服务器 ...
随机推荐
- JavaScript高级程序设计-10.11: DOM及其扩展
什么是DOM? DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口).DOM描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 文档节点(do ...
- TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免
TCP的拥塞控制 1. 拥塞:即对资源的需求超过了可用的资源.若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降. 拥塞控制:防止过多的数据注入到网络中,这样 ...
- python 爬取的数据要如何展现(可视化)?
我是把数据放在 mongodb ,然后单独一个脚本作分析,导出 json ,用 c3.js 画图,然后随便写个很简单的页面就好了. 展示在这里: http://107.170.207.236/job_ ...
- oracle存储过程学习---包的概念
转自:http://www.iteye.com/topic/1111793 一.包的概念 类似于一个容器,能打包相应的Pl/SQL变量.常量.函数.过程.复合数据类型等元素到这个容器内.用来限制 ...
- KMP之我见
第二次看kmp,才有点搞懂这个算法(我真是太弱了,就该orz陈老师和龙老师): kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置.常规方法 ...
- DOMContentLoaded
setTimeout(function(){ alert("settimeout"); },0); EventUtil.addHandler(window, "DOMCo ...
- centos5.5關閉ssh保留運行的程序
SSH会话关闭时,ssh所关联的pty关闭,系统会给这个pty所关联的session中的所有进程发送SIGHUP信号, SIGHUP的默认信号处理程序是终止进程,除非进程自己处理了SIGHUP. 解决 ...
- Angular - - ngCsp、ngFocus、ngBlur、ngForm
ngCsp 处理CSP(上下文安全策略)的支持. 当开发如google浏览器的扩展时候这个就必须使用. CSP禁止应用程序使用eval和Function(string)生成的函数.如果我们需要兼容,我 ...
- Mysql密码忘记后如何重设密码
1. 首先检查mysql服务是否启动,若已启动则先将其停止服务 2. 打开第一个cmd窗口,切换到mysql的bin目录,运行命令: mysqld --defaults-file="C:\P ...
- MyBatis 使用foreach与其他方式的时候参数传递方式
Mapper文件: <select id="selectPersonByIds" parameterType="map" resultMap=" ...