• 十九、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
    ", 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
    ", 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
    ", env);
    15         i++;
    16     }
    17 }
    18 
    19 int main(void)
    20 {
    21     show_env();
    22     printf("==============================================
    ");
    23     putenv("CCTV=beijing");
    24     setenv("COMPANY", "homenone", 1);
    25     show_env();
    26     printf("==============================================
    ");
    27     unsetenv("CCTV");
    28     unsetenv("COMPANY");
    29     show_env();
    30     return 0;
    31 }
  • 相关阅读:
    四种数据库随机获取10条数据的方法
    古诗词
    一份 Spring Boot 项目搭建模板
    2020年只剩两个月,今年你是怎么过的?
    关于使用LocalDateTime进行存储,时间相差比较多的问题。
    项目中常用的19条MySQL优化
    SpringBoot注解大全
    JDK8的LocalDateTime用法
    linux代理上网5分钟搞定
    SQL简单语句作用
  • 原文地址:https://www.cnblogs.com/kele-dad/p/9124047.html
Copyright © 2020-2023  润新知