父子进程间通信---通过设置环境变量

父进程向其环境块添加一个环境变量,变量的名称应该是子进程知道的一个名称,然后当父进程生成子进程的时候,这个子进程会继承父进程的环境变量,所以能轻松调用GetEnvironmentVariable来获得这个环境变量的值。如果子进程还要生成另一个子进程,这种方式就应该非常不错,因为环境变量是可以反复继承的。


代码举例:

父进程:

#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	LPCTSTR lpName(_T("zzc"));  
	LPCTSTR lpValue(_T("88888"));  

	//设置环境变量的值
	::SetEnvironmentVariable(lpName,lpValue);  

	STARTUPINFO si;  
	PROCESS_INFORMATION pi;  

	ZeroMemory(&si, sizeof(si));  
	ZeroMemory(&pi, sizeof(pi));

	if( !CreateProcess( _T("D:\\绘图编程\\Parent\\Debug\\Child.exe"),  
		NULL,  
		NULL,   
		NULL, 
		TRUE,
		0,  
		NULL,  
		NULL,   
		&si,  
		&pi) )  
	{  
		cout <<"shibai" <<endl;
	}  

	else{
		cout << "chenggong" << endl;
	}

	return 0;
}

子进程:

#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	LPCTSTR lpName(_T("zzc"));   
	int nlength = ::GetEnvironmentVariable(lpName,NULL,0);  
	LPTSTR lpValue = new TCHAR[nlength+1];  
	memset(lpValue,'\0',nlength+1);  
	::GetEnvironmentVariable(lpName,lpValue,nlength+1);

	setlocale(LC_ALL, "chs");
	_tprintf(lpValue);

	cout << endl;

	system("pause");

	return 0;
}

注:CreateProcess()参数5:

表示新进程是否从调用进程处继承了内核对象句柄。如果参数的值为 TRUE,调用进程中的每一个可继承的内核对象句柄都将被子进程继承,这样我们可以通过环境变量的形式将所继承的某个句柄值传递给子进程,子进程就可以通过收到的句柄值对内核对象进行操作了,被继承的句柄与原进程拥有完全相同的值和访问权限;如果设为 FALSE,那么不继承。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值