进程环境之环境变量
环境字符串的形式通常如下:
name=value
UNIX内核并不查看这些字符串,它们的解释完全取决于各个应用程序。
ISO C定义了一个函数getenv,可以用于取环境变量值,但是该标准又称环境变量的内容是由实现定义的。
#include <stdlib.h> char *getenv( const char *name ); 返回值:指向与name关联的value的指针,若未找到则返回NULL
注意,此函数返回一个指针,它指向name=value字符串中的value。我们应当使用getenv从环境中取一个指定环境变量的值,而不是直接访问environ。
除了取环境变量的值,有时也需要设置环境变量。我们可能希望改变现有变量的值,或者增加新的环境变量。(我们能影响的只是当前进程及调用的任何子进程的环境,但不能影响父进程的环境,这通常是一个shell进程。尽管如此,修改环境变量的能力仍然是很有用的。)
#include <stdlib.h> int putenv( char *str ); int setenv( const char *name, const char *value, int rewrite ); int unsetenv( const char *name ); 三个函数返回值:若成功则返回0,若出错则返回非0值
这三个函数的操作是:
putenv取形式为name=value的字符串,将其放到环境表中。如果name已经存在,则先删除其原来的定义。
setenv将name设置为value。如果在环境中name已经存在,那么(a)若rewrite非0,则首先删除其现有的定义;(b)若rewrite为0,则不删除其现有定义(name不设置为新的value,而且也不会出错)。
unsetenv删除name的定义。即使不存在这种定义也不算出错。
本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。