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

      先看什么是环境变量吧, 在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 
#include 

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 
#include 

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命令来设置和获取环境变量, 当然也有对应的函数来实现这个功能, 而且设置的是系统的环境变量, 不同进程间是可以访问同一环境变量的, 这样就可以实现两个进程间的通信了, 确实可行, 而且非常普遍。


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




你可能感兴趣的:(S1:,C/C++,s2:,软件进阶,s2:,进程线程)