1.匿名管道
匿名管道式一个没有命名的单向管道。通常用来在子进程和父进程之间通信。不能够实现跨网络通信。只能在父进程中调用CreateProcess函数来穿件子进程,将管道的读、写句柄传递给子程序。
创建匿名管道:
Bool CreatePipe();
当一个子进程从其父进程继承了匿名管道的句柄后,这2个进程就可以通过该句柄进行通信了。
- 进程的创建
bool CreateProcess(...);
具体实现:
1、首先在view类中定义2个成员变量:hRead和hWrite,并在析构函数中释放
2、创建匿名管道
-
定义安全结构体(SECURITY_ATTRIBUTES),将bInheritHandle设置为TRUE。 - 调用CreatePipe()函数。
- 启动子程序,并且将读写句柄传递给子程序。启动进程采用CreateProcess()函数。此时需要定义一个STARTUPINFO结构体类型的值,用来指定新进程的主窗口如何显示。
注意:在使用STARTUPINFO机构变量时,只是用到了其中一部分值。因此首先要使用ZeroMemory()函数将其中的变量初始化为0(否者其中的变量为随机值)。
然后将子进程的标准输入和输出句柄分别设置为管道的读、写句柄。
ZeroMemory(&sui,sizeof(STARTUPINFO)); sui.cb=sizeof(STARTUPINFO); sui.dwFlags=STARTF_USESTDHANDLES; sui.hStdInput=hRead; sui.hStdOutput=hWrite; sui.hStdError=GetStdHandle(STD_ERROR_HANDLE); |
当创建一个新的进程时候,系统会为该进程创建一个进程内核对象和一个县城内核对象,而内核对象都有个一使用计数器。当CreateProcess函数在内部打开这些对象时候,其使用计时器就加一。
- 读取数据
使用ReadFile()函数从匿名管道的读句柄从管道中读取数据。
- 写入数据
WriteFile()实现
- 子进程的实现
- 获取管道的读取和写入句柄