十九、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 }

原文地址:https://www.cnblogs.com/kele-dad/p/9124047.html

时间: 2024-08-30 05:57:32

十九、Linux 进程与信号---环境表的相关文章

2015-1-21起始,福州第十九中学,奥赛培训跟进表

(首先,请你收藏本页面) 联系教师:[email protected] 培训地点:十九中,一号楼,6层,第二机房 培训守则: 1.学员每次培训,均需携带如下物品:鞋套(禁止使用一次性鞋套).水笔.荧光记号笔.专用的一个空白笔记本.U盘(可用空间不小于128MB).<初赛>. 2.定位就座,严肃学习纪律,严禁携带零食及饮料进入机房. 3.认真做好课前预习.课堂笔记.和课后复习作业的工作. 4.不迟到.不早退. 5.无故迟到.早退.缺课.不做作业--,次数较多的,自己回去跟家长说,不要再来浪费时间

二十六、Linux 进程与信号---system 函数 和进程状态切换

26.1 system 函数 26.1.1 函数说明 system(执行shell 命令)相关函数 fork,execve,waitpid,popen 1 #include <stdlib.h> 2 int system(const char * string); 函数功能:简化 exec 函数 函数说明 system()会调用 fork() 产生子进程,由子进程来调用 /bin/sh -c string 来执行参数 string 字符串所代表的命令,此命令执行完后随即返回原调用的进程. 在调

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

22.2 父子进程操作文件 文件操作由两种模式: IO 系统调用操作文件 标准C IO 操作文件 看代码: 1 #include <unistd.h> 2 #include <string.h> 3 #include <fcntl.h> 4 #include <stdio.h> 5 #include <stdlib.h> 6 7 int g_val = 30;//全局变量,存放在数据段 8 9 int main(void) 10 { 11 int

二十四、Linux 进程与信号---wait 函数

24.1 wait 函数说明 24.1.1 waitpid---等待子进程中断或结束 waitpid(等待子进程中断或结束) 相关函数 wait,fork 1 #include <sys/types.h> 2 #include <sys/wait.h> 3 pid_t waitpid(pid_t pid,int * status,int options); 函数说明 waitpid() 会暂时停止目前进程的执行,直到有信号来到或子进程结束. 如果在调用 wait() 时子进程已经结

Linux学习(二十九)iptables(三)nat表的应用

需求 A机器可以访问外网,B机器和A机器处于同一个内网,现在要让B机器通过A机器访问外网. 步骤 1.为虚拟机添加一块网卡. 如果没有区段名称的话,点击'LAN区段(S)...'按钮,新建一个. 2.ifconfig -a命令可以看到刚添加进来的尚未启用的网卡: [[email protected] ~]# ifconfig -a eth1 Link encap:Ethernet HWaddr 00:0C:29:AC:CC:56 inet addr:192.168.182.130 Bcast:1

(十九)守护进程

pa -axj PPID -->父进程ID PID-->进程ID PGID-->进程组ID SID-->会话ID TTY-->终端名称 TPGID-->中断进程组ID UID-->用户ID COMMAND-->命令字符串

Liferay 6.2 改造系列之十九:修改站点设置的表单内容

在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of sections that will be included as part of the form when # updating a site. # sites.form.update.main=details,categorization,site-url,site-template sites.form.update.seo=si

linux编程:环境表

每个进程在启动的时候都会收到一张环境表.环境表是由一个字符指针数组组成,每个指针包含一个以NULL结束的字符串的地址,全局变量environ包含了指针数组的地址: extern char **environ; 在linux中,环境变量由:name=value这样的字符串组成,下图是一个由5个环境变量组成的环境表结构: 如果是查看整个环境需要使用environ变量,如果只读取某个变量可以使用getenv和pucenv函数. 相关函数: #include <stdlib.h> char *gete

CCNA实验十九 静态与默认路由 &nbsp;

CCNA实验十九 静态与默认路由 环境:Windows XP .Packet Tracert 5.3 目的:了解静态路由与默认路由的使用 说明: 静态路由是指由网络管理员手工配置的路由信息.当网络的拓扑结构或链路的状态发生变化时,需要手工去修改路由器中相关的静态路由信息.静态路由信息在缺省情况下是私有的,不会传递给其他路由器.可以通过对路由器进行设置使之成为共享的.静态路由一般适用于比较简单的网络环境.静态路由的管理距离为1.(注意直连的接口管理距离为0)管理距离越少,越可靠. 默认路由是特殊的