进程间通信(二):利用匿名管道
来源:互联网 发布:c51单片机 定时器计时 编辑:程序博客网 时间:2024/06/07 09:05
进程间通信(二):利用匿名管道
进程间通信的四种方式
1) 剪贴板
2) 匿名管道
3) 命名管道
4) 邮槽
使用CreatePipe函数来创建匿名管道,由于匿名管道只能实现在父进程和子进程之间进行通信,所以在父进程创建完匿名管道之后,利用CreateProcess来创建子进程,然后通过ReadFile和WriteFile来实现从管道中读取和写入数据。
下面为父进程创建匿名管道及创建子进程的代码:
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&m_hread,&m_hwrite,&sa,0))
{
MessageBox("创建匿名管道失败/n");
return ;
}
STARTUPINFO startinfo;
ZeroMemory(&startinfo,sizeof(STARTUPINFO));
startinfo.cb=sizeof(STARTUPINFO);
startinfo.dwFlags=STARTF_USESTDHANDLES;
startinfo.hStdInput=m_hread;
startinfo.hStdOutput=m_hwrite;
startinfo.hStdError=GetStdHandle(STD_ERROR_HANDLE);
PROCESS_INFORMATION pi;
if(!CreateProcess("..//child//Debug//child.exe",NULL,NULL,NULL,
TRUE,0,NULL,NULL,&startinfo,&pi))
{
MessageBox("创建子进程失败/n");
CloseHandle(m_hread);
CloseHandle(m_hwrite);
return ;
}
else
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
下面为从管道中读取数据的代码:
char buf[100];
DWORD readcount;
if(!ReadFile(m_hread,buf,100,&readcount,NULL))
{
MessageBox("读取数据失败/n");
return ;
}
MessageBox(buf);
下面为从管道中写入数据的代码:
char buf[]="welcome to my blog!";
int len=strlen(buf)+1;
DWORD writecount;
if(!WriteFile(m_hwrite,buf,len,&writecount,NULL))
{
MessageBox("写入数据失败/n");
return ;
}
下面为子进程中设置读写句柄的代码:
m_hread=GetStdHandle(STD_INPUT_HANDLE);
m_hwrite=GetStdHandle(STD_OUTPUT_HANDLE);
而子进程中从管道中读取和写入数据的代码同父进程中读取和写入数据的代码。
- 进程间通信(二):利用匿名管道
- 进程间通信之管道通信(匿名管道)
- 进程间通信(1):匿名管道
- Pipe,利用匿名管道实现进程间通信
- 进程间通信-匿名管道
- 进程间通信 - 匿名管道
- 进程间通信匿名管道
- 进程间通信-匿名管道
- 进程间通信(剪切板、匿名管道、命名管道、邮槽)
- 进程间通信(1)---匿名管道与命名管道
- 孙鑫 第十七课进程间通信之二 匿名管道
- 进程间通信:匿名管道通信
- 进程间通信之匿名管道通信
- 进程通信-匿名管道
- 进程通信 - 匿名管道
- 进程通信之二 管道技术第二篇 匿名管道
- 进程通信之二 管道技术第二篇 匿名管道
- 进程通信之二 管道技术第二篇 匿名管道
- 进程间通信(四):利用邮槽
- GCD (greatest common divisor)【求最大公约数】
- 进程间通信(三):利用命名管道
- STL实践指南(1)
- Alpha混合物体的深度排序[译]
- 进程间通信(二):利用匿名管道
- AfxGetApp用法
- 从用友软件看国内的软件开发的前景
- 进程间通信(一):利用剪贴板
- windows 2003 server的一些优化设置
- Spring2.5的新特性
- STL实践指南(2)
- Java性能优化[4]:关于finalize函数
- STL实践指南(3)