UNIX环境编程学习笔记(16)——进程管理之进程环境变量
2014-10-03 21:31
621 查看
lienhua34
2014-10-03
extern char **environ;
例如,图 1 显示了包含有 5 个环境字符串的环境表,
图 1: 含有 5 个环境字符串的环境表
ISO C 定义了一个函数 getenv,用于获取环境变量值。
#include <stdlib.h>
char *getenv(const char *name);
返回值:指向与name关联的value的指针,若为找到则返回NULL
POSIX.1 定义了两个函数 putenv 和 setenv,用于设置环境变量,
#include <stdlib.h>
int putenv(char *str);
返回值:若成功则返回0,若出错则返回非0值
putenv 的参数是形式为 name=value 的字符串的指针,将参数放到环境表中。如果 name 已经存在,则先删除其原有的定义。
#include <stdlib.h>
int setenv(const char *name, const char *value, int rewrite);
返回值:若成功则返回0,若出错则返回-1
setenv 函数将环境变量 name 的值设置为 value。如果环境表中 name 已存在,那么
• 若 rewrite 为非 0 值,则首先删除其现有定义。
• 若 rewrite 为 0,则不删除其现有定义,name 不设置为新的 value,也不出错。
另外提供了 unsetenv 函数用于删除环境变量,
#include <stdlib.h>
int unsetenv(const char *name);
返回值:若成功则返回0,若出错则返回-1
unsetenv 函数删除 name 的定义,即使不存在环境变量 name 也不出错。
例子:
编译该程序,生成文件 envdemo,然后运行该文件,
(done)
2014-10-03
1 环境表和环境指针
在每个进程启动时,都会接到一张环境表。环境表是一个字符指针数组,其中每个指针包含一个以 null 结束的 C 字符串的地址。全局变量environ 则包含了该指针数组的地址,extern char **environ;
例如,图 1 显示了包含有 5 个环境字符串的环境表,
图 1: 含有 5 个环境字符串的环境表
2 环境变量
环境字符串的形式通常为,name=value。ISO C 定义了一个函数 getenv,用于获取环境变量值。
#include <stdlib.h>
char *getenv(const char *name);
返回值:指向与name关联的value的指针,若为找到则返回NULL
POSIX.1 定义了两个函数 putenv 和 setenv,用于设置环境变量,
#include <stdlib.h>
int putenv(char *str);
返回值:若成功则返回0,若出错则返回非0值
putenv 的参数是形式为 name=value 的字符串的指针,将参数放到环境表中。如果 name 已经存在,则先删除其原有的定义。
#include <stdlib.h>
int setenv(const char *name, const char *value, int rewrite);
返回值:若成功则返回0,若出错则返回-1
setenv 函数将环境变量 name 的值设置为 value。如果环境表中 name 已存在,那么
• 若 rewrite 为非 0 值,则首先删除其现有定义。
• 若 rewrite 为 0,则不删除其现有定义,name 不设置为新的 value,也不出错。
另外提供了 unsetenv 函数用于删除环境变量,
#include <stdlib.h>
int unsetenv(const char *name);
返回值:若成功则返回0,若出错则返回-1
unsetenv 函数删除 name 的定义,即使不存在环境变量 name 也不出错。
例子:
#include <stdio.h> #include <stdlib.h> int main(void) { char *envVal; char *myenv; if ((envVal = getenv("PATH")) == NULL) { printf("not environment variable PATH\n"); } else { printf("PATH=%s\n", envVal); } if (setenv("myenv", "li enhua", 0) == -1) { printf("setenv error\n"); } else { myenv = getenv("myenv"); printf("myenv=%s\n", myenv); } if (putenv("myenv1=haha") != 0) { printf("putenv error\n"); } else { myenv = getenv("myenv1"); printf("myenv1=%s\n", myenv); } exit(0); }
编译该程序,生成文件 envdemo,然后运行该文件,
lienhua34:demo$ gcc -o envdemo envdemo.c lienhua34:demo$ ./envdemo PATH=/usr/local/texlive/2013/bin/i386-linux:/usr/local/texlive/2013/bin/i386-linux:/ myenv=li enhua myenv1=haha
(done)
相关文章推荐
- UNIX环境编程学习笔记(16)——进程管理之进程环境变量 http://www.cnblogs.com/lienhua34/p/4005367.html
- UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
- UNIX环境编程学习笔记(21)——进程管理之获取进程终止状态的 wait 和 waitpid 函数
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- UNIX环境编程学习笔记(15)——进程管理之进程终止
- UNIX环境编程学习笔记(20)——进程管理之exec 函数族
- UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念
- UNIX环境编程学习笔记(21)——进程管理之获取进程终止状态的 wait 和 waitpid 函数
- UNIX环境编程学习笔记(15)——进程管理之进程终止
- UNIX环境编程学习笔记(18)——进程管理之进程控制三部曲
- UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- UNIX环境编程学习笔记(20)——进程管理之exec 函数族
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- UNIX环境编程学习笔记(18)——进程管理之进程控制三部曲
- Unix环境高级编程学习笔记之进程环境(1)
- UNIX环境编程学习笔记(24)——信号处理进阶学习之信号集和进程信号屏蔽字
- unix环境编程学习笔记-----有关进程的一些疑问???
- Unix环境编程学习笔记------在进程间传送文件描述符
- UNIX环境编程学习笔记(7)——文件I/O之文件访问权限与进程访问控制