Windows下利用C语言程序设置环境变量---能否用环境变量实现进程间的通信?

972 篇文章 329 订阅
24 篇文章 11 订阅

      先看什么是环境变量吧, 在Windows的cmd中, 我们输入一下set命令, 得到:

C:\Documents and Settings\Administrator>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Administrator\Application Data
CLIENTNAME=Console
CommonProgramFiles=C:\Program Files\Common Files

.......

    我们注意到, 每行都有一个"="号, 前面的叫环境变量名, 后面的叫环境变量的值。  我们再执行一下: set | findstr -i username, 得到的结果为:

C:\Documents and Settings\Administrator>set | findstr -i username
USERNAME=Administrator

    也就是说, 环境变量USERNAME的值是Administrator, 下面, 我们通过程序来获取一下这个东东:

 

#include <stdlib.h>
#include <stdio.h>

int main()
{
	const char *pEn = getenv("USERNAME");
	if (pEn)
	{
		printf("pEn is:\n%s\n", pEn);
	}
	else
	{
		printf("undefined\n");
	}

	return 0;
}

     我们看到, 程序结果为:

 

pEn is:
Administrator

 

     当然, 如果本来不存在某环境变量, 上面程序就会走入else分支。 下面, 我们看看如何用程序来设置自己想设置的环境变量:

 

#include <stdlib.h>
#include <stdio.h>

int main()
{
	const char *pEn = getenv("testName");
	if (pEn)
	{
		printf("pEn is:\n%s\n", pEn);
	}
	else
	{
		printf("undefined\n");
	}

	int iRet = putenv("testName=beauty");
	if (iRet < 0)
	{
		printf("error\n");
	}
	else
	{
		printf("set successfully\n");
	}

	pEn = getenv("testName");
	if (pEn)
	{
		printf("pEn is:\n%s\n", pEn);
	}
	else
	{
		printf("undefined\n");
	}

	return 0;
}

       程序结果为:

 

undefined
set successfully
pEn is:
beauty

      这多么好啊, 于是我还打算用这个方法实现进程间的通信, 以为进程都可以访问testName,  然而, 我错了, 因为上面的putenv设置的环境变量仅在当前进程中有效, 我连续两次运行上述程序, 发现都是一样的结果, 这说明第二个进程无法感知到testName, 而且, 我们在cmd中执行一下set | findstr -i testname, 也发现没有增加testName这个环境变量。 好吧, 看来进程通信的想法是遇到一些问题了。 如果以后找到了用程序(函数)设置系统环境的方法, 我再来完善本文。

 

      在Android系统中, 我们经常用setprop和getprop命令来设置和获取环境变量, 当然也有对应的函数来实现这个功能, 而且设置的是系统的环境变量, 不同进程间是可以访问同一环境变量的, 这样就可以实现两个进程间的通信了, 确实可行, 而且非常普遍。

 

      说到这里, 本文标题的疑问就释然了, 能否用环境变量实现进程间的通信, 取决于所设的环境变量是否为系统环境变量(永久生效的)。好吧, 先这样。

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值