进程环境之环境变量

环境字符串的形式通常如下:

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/

原文地址:https://www.cnblogs.com/nufangrensheng/p/3508319.html