`
txf2004
  • 浏览: 6867364 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

匿名管道实现父子进程之间的通信....

 
阅读更多

/*匿名管道: 匿名管道可以实现父子进程的通信, 一个由另一个进程调用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 ;

}

分享到:
评论

相关推荐

    进程间通信之匿名管道demo

    利用匿名管道来实现进程间通信,双向。注意这种方式只能在父子进程中使用。使用方法: 两个exe,一个客户端,一个服务器,两个exe必须在同一目录下,打开NoNamedPipeParent.exe,点击创建匿名管道,此时会创建一个...

    匿名管道用于进程间通信

    API 匿名管道用于进程间通信,代码都有注释,注意无法直接调试要打开exe才能看到效果,因为里面有父子进程

    进程间通信 匿名管道 命名管道 pipe namepipe

    VS2008工程 里面有4个工程,命名管道和匿名管道的父子进程。

    MFC匿名管道通信

    基于MFC的匿名管道通信,父子进程实时通信实时显示。操作系统API

    进程通信--匿名管道

    运用匿名管道,在父子进程间进行通信,也是进程间通信的方法之一。

    MFC对话框演示匿名管道通信

    MFC对话框 父子进程之间通过一个匿名管道进程通信

    进程间通信的四种方式

    匿名管道只能在父子进程之间进行通信 匿名管道的创建和使用 父子进程之间的通信 子进程的创建 数据的读写(WriteFile,ReadFile,CreateFile) -------------------------------------------------...

    Visual C++2010开发权威指南.part07

    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 ...

    Visual C++2010开发权威指南(共三部分).part1.rar

    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 ...

Global site tag (gtag.js) - Google Analytics