/*匿名管道: 匿名管道可以实现父子进程的通信, 一个由另一个进程调用CreateProcess函数创建的进程称为子进程
我们在利用CreatePipe创建你民管道的时候会获得管道的读写句柄 子进程可以继承这个句柄
在父进程通过 CreatePipe函数获得句柄可以对匿名管道进行读写操作
在子进程 通过GetStdHandle()通过不同的参数 可以获得标准 输入 输出 错误的 句柄 这些句柄对子进程来说都是从父进程继承过来的所以我们在
子进程也可以对匿名进行读写 这就实现了父子进程之间的通信
*/
#include<iostream>
#include "windows.h"
using namespace std ;
void main()
{
HANDLE hRead,hWrite ;
SECURITY_ATTRIBUTES sa={0};
sa.bInheritHandle=TRUE ;
sa.lpSecurityDescriptor=NULL ;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
::CreatePipe(&hRead, //返回管读取句柄
&hWrite, //返回管道写句柄
&sa,//SECURITY_ATTRIBUTES结构体指针 一定不能为NULL否则子进程不能继承返回的句柄
0//管道的buffer大小 0表示默认大小
) ;
PROCESS_INFORMATION pp={0};//接收进程信息
STARTUPINFO si ={0}; //表示子进程如何显示
si.cb=sizeof(STARTUPINFO) ;//大小
si.dwFlags=STARTF_USESHOWWINDOW ;//指定那些可用
si.hStdInput=hRead ;//设置标准输入句柄 为管道读取句柄
si.hStdOutput=hWrite ;//设置标准输出句柄为管道写句柄
si.hStdError=::GetStdHandle(STD_ERROR_HANDLE) ;//调用函数获得标准错误句柄
CreateProcess("sub.exe",//可执行模块的完整路径
NULL ,//命令行参数
NULL,//默认安全结构属性 NULL
NULL,//同上
TRUE,//子进程是否从Calling他的进程继承句柄
0,//表示启动进程时的附加标记 这里我们只是创建一个进程设置为 0即可
NULL,//表示新进程使用的内存块 NULL表示子进程使用父进程的内存块
NULL,//表示启动时子进程的路径名 如果为NULL表示子进程和父进程使用相同的路径名
&si ,//表示子进程如何显示 还有为标准输入输出 标准错误句柄赋值为管道句柄
&pp) ;//LPPROCESS_INFORMATION 结构体用来接收创建的子进程的信息
}
/////子进程
#include <iostream>
#include "windows.h"
using namespace std ;
void main()
{
HANDLE hRead=::GetStdHandle(STD_INPUT_HANDLE) ;
char buf[100] ="";
DWORD len ;
::ReadFile(hRead,buf,100,&len,NULL) ;
cout<<"读取到:"<<buf<<endl ;
}
分享到:
相关推荐
利用匿名管道来实现进程间通信,双向。注意这种方式只能在父子进程中使用。使用方法: 两个exe,一个客户端,一个服务器,两个exe必须在同一目录下,打开NoNamedPipeParent.exe,点击创建匿名管道,此时会创建一个...
API 匿名管道用于进程间通信,代码都有注释,注意无法直接调试要打开exe才能看到效果,因为里面有父子进程
VS2008工程 里面有4个工程,命名管道和匿名管道的父子进程。
基于MFC的匿名管道通信,父子进程实时通信实时显示。操作系统API
运用匿名管道,在父子进程间进行通信,也是进程间通信的方法之一。
MFC对话框 父子进程之间通过一个匿名管道进程通信
匿名管道只能在父子进程之间进行通信 匿名管道的创建和使用 父子进程之间的通信 子进程的创建 数据的读写(WriteFile,ReadFile,CreateFile) -------------------------------------------------...
16.3.5 一个利用匿名管道在父子 16.1.9 进程间通信的示例 632 16.4 命名管道通信 637 16.4.1 CreateNamedPipe()函数 637 16.4.2 ConnectNamedPipe()函数 639 16.4.3 DisconnectNamedPipe() 16.1.9 函数 640 16.4.4 ...
5.4.9 在列表控件中实现工作区 205 5.4.10 处理列表控件中的通知消息 206 5.4.11 更改列表控件样式 206 5.4.12 虚拟列表控件 207 5.4.13 列表控件的消息映射 209 5.4.14 列表控件的风格选项及表头设置 210 5.4.15 ...