十九Linux 进程与信号---环境表
Posted 游戏进行中
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十九Linux 进程与信号---环境表相关的知识,希望对你有一定的参考价值。
19.1 环境表
19.1.1 介绍
这是启动例程的第二各作用,搜集环境表,然后传递给主函数。
环境表就是一个指针数组。
环境表
- 每个进程都有一个独立的环境表
- 初始的环境表继承自父进程
- 主函数可以带三个参数,第三个参数则是环境表,可以通过第三个参数获取环境参数,也可以通过外部全局变量来定义环境表,extern char **environ。
- 设置的环境变量只影响当前进程的,不为全局的
19.1.2 例子
(1)通过 main 函数获取
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <fcntl.h> 6 7 int main(int argc, char *argv[], char *envp[]) 8 { 9 int i = 0; 10 char *env; 11 while((env = envp[i]) != NULL) { 12 printf("%s\\n", env); 13 i++; 14 } 15 16 return 0; 17 }
(2)通过全局变量
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <fcntl.h> 6 7 extern char **environ; 8 9 void show_env() 10 { 11 int i = 0; 12 char *env; 13 while((env = environ[i]) != NULL){ 14 printf("%s\\n", env); 15 i++; 16 } 17 } 18 19 int main(void) 20 { 21 show_env(); 22 return 0; 23 }
19.2 环境变量操作函数
头文件都为 stdlib.h
19.2.1 获取环境变量内容--- getenv
1 #include <stdlib.h> 2 char * getenv(const char *name);
- 函数功能
- 取得环境变量内容
- 函数说明
- getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。
- 环境变量的格式为name=value。
- 返回值
- 执行成功则返回指向与 name 关联的 value 的指针,找不到符合的环境变量名称则返回NULL
19.2.2 改变或增加环境变量 ---putenv
1 #include <stdlib.h> 2 int putenv(const char * string);
- 函数功能
- 改变或增加环境变量
- 函数说明
- putenv()用来改变或增加环境变量的内容。
- 参数string的格式为name=value,如果该环境变量原先存在,则变量内容会依参数string改变,否则此参数内容会成为新的环境变量。
- 返回值
- 执行成功则返回0,有错误发生则返回-1。
- 错误代码
- ENOMEM 内存不足,无法配置新的环境变量空间
19.2.3 改变或增加环境变量---setenv
1 #include <stdlib.h> 2 int setenv(const char *name,const char * value,int overwrite);
- 函数功能
- 改变或增加环境变量
- 函数说明
- setenv()用来改变或增加环境变量的内容。参数name为环境变量名称字符串。
- 参数
- @value 变量内容,
- @overwrite 用来决定是否要改变已存在的环境变量。
- 如果overwrite不为0,而该环境变量原已有内容,则原内容会被改为参数value所指的变量内容。
- 如果overwrite为0,且该环境变量已有内容,则参数value会被忽略。
- 返回值
- 执行成功则返回0,有错误发生时返回-1。
- 错误代码
- ENOMEM 内存不足,无法配置新的环境变量空间
19.2.4 删除环境变量---unsetenv
#include <stdlib.h> int unsetenv(const char *name);
- 函数功能:
- 删除 name 的定义,即使不存在这种定义也不算出错
- 返回值:
- 成功返回0,出错返回 -1
19.3 例子
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <fcntl.h> 6 7 extern char **environ; 8 9 void show_env() 10 { 11 int i = 0; 12 char *env; 13 while((env = environ[i]) != NULL){ 14 printf("%s\\n", env); 15 i++; 16 } 17 } 18 19 int main(void) 20 { 21 show_env(); 22 printf("==============================================\\n"); 23 putenv("CCTV=beijing"); 24 setenv("COMPANY", "homenone", 1); 25 show_env(); 26 printf("==============================================\\n"); 27 unsetenv("CCTV"); 28 unsetenv("COMPANY"); 29 show_env(); 30 return 0; 31 }
以上是关于十九Linux 进程与信号---环境表的主要内容,如果未能解决你的问题,请参考以下文章
Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)