十九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进程的管理与调度(十九)

Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

二十Linux 进程与信号---进程创建(续)

Linux关于线程的内容