进程间通信
来源:互联网 发布:淘宝秒杀显示无法购买 编辑:程序博客网 时间:2024/06/05 22:45
1.剪切板
//保存到剪切板
if(OpenClipboard()){
EmptyClipboard();
CString str;
char* pBuf;
HANDLE handle;
GetDlgItemText(IDC_EDIT_SEND,str);//从一个EditBox中得到要要放置到剪切板上的数据
handle=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);//得到一个handle
pBuf=(char*)GlobalLock(handle);//用handle得到一个指针
strcpy(pBuf,str);
GlobalUnlock(handle);
SetClipboardData( CF_TEXT ,handle);
//关闭剪切板,不然其他的进程不能打开CloseClipboard();
}
//从剪切板得到数据
if(OpenClipboard()/*判断是否打开剪切板*/)
{
CString str;
char* pBuf;
HANDLE handle;
handle=GetClipboardData(CF_TEXT);
pBuf=(char*)GlobalLock(handle);
GlobalUnlock(handle);
SetDlgItemText(IDC_EDIT_RECV,pBuf);
CloseClipboard();
}
2.匿名管道
//匿名管道只适用于父子进程之间的通信,在父进程中创建匿名管道,然后启动子进程,用ReadFile()和WriteFile()实现信息的发送与接收
// ParentProcess
// OnCreatePipe
//先创建两个HANDLE hRead
// HANDLE hWrite
{
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("创建匿名管道失败!");
return;
}
STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&sui,sizeof(STARTUPINFO));
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite;
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);
if(!CreateProcess("..\\Child\\Debug\\Child.exe",NULL,NULL,NULL,
TRUE,0,NULL,NULL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
hRead=NULL;
hWrite=NULL;
MessageBox("创建子进程失败!");
return;
}
else
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}
OnPipeRead()
{
char buf[100];
DWORD dwRead;
if(!ReadFile(hRead,buf,100,&dwRead,NULL))
{
MessageBox("读取数据失败!");
return;
}
MessageBox(buf);
}
OnPipeWrite()
{
char buf[]="http://www.baidu.com";
DWORD dwWrite;
if(!WriteFile(hWrite,buf,strlen(buf)+1,&dwWrite,NULL))
{
MessageBox("写入数据失败!");
return;
}
}
//ChildProcess
在初始化中将输入输出句柄设置为标准输入输出 hRead=GetStdHandle(STD_INPUT_HANDLE);
hWrite=GetStdHandle(STD_OUTPUT_HANDLE);
读写函数和父进程基本一样;
3.命名管道
4.邮槽
- 进程&进程间通信
- 信号通信(进程间通信)
- 进程间通信-管道通信
- 进程间通信--管道通信
- [进程通信] 进程间通信 之 管道
- 进程与进程间通信
- 【IO进程】进程间通信
- 进程间通信
- 进程间通信方式
- 进程间通信IPC
- 进程间通信
- 操作系统:进程间通信
- 进程间的通信
- 进程间通信
- 进程间通信IPC
- 进程间通信
- 进程间通信总结
- 进程间管道通信
- 标准IO库
- Linux常用命令:tee
- Linux常用命令:cp
- java适配器模式之--类适配器
- Linux常用命令:cd
- 进程间通信
- Linux常用命令:ls
- java适配器模式之二 --类适配器
- 裸机系列——s3c2440lcd汉字显示
- Linux常用命令:w
- Git和Repo扫盲——如何取得Android源代码
- Linux常用命令:useradd
- opencv 删除二值化图像中面积较小的连通域 .
- char和varchar区别