一、环境变量bash下的环境变量每个进程都默认从父进程继承环境变量bash本身就是一个程序,这个程序运行的时候,是bash进程可以定义只能在自己的这个进程中使用的变量,称之为自定义变量用户可以使用【export 环境变量名字】 将自定义变量变为环境变量,环境变量可以被子进程继承如何使用程序访问环境变量:系统维护着一个全局变量(extern char **environ;)这个全局变量的名字就是环境变量列表的首地址 ????? //**environ也就是指针数组和*argv[]其实一样,只是前者是变量,后者是常量借用这个全局变量,遍历环境变量列表(trav_l.c)tarena@ubuntu:~/day/day31$ cat trav_l.c #include <stdio.h>extern char **environ; //这里作用仅是扩充作用域int main(void) {while(*environ != NULL) {printf("%s\n", *environ);environ++;}return 0;}C语言的完整开头:int main(int argc, char *argv[], char *envp[])//第三个参数可以改变环境变量只用这种方式来遍历环境变量的列表(trav_l1.c)#include <stdio.h>int main(int argc, char *argv[], char *envp[]) {int i = 0;for(; envp[i] != NULL; i++)printf("%s\n", envp[i]);return 0;}tarena@ubuntu:~/day/day31$ a.out SSH_AGENT_PID=1875GPG_AGENT_INFO=/tmp/keyring-RH8OwI/gpg:0:1TERM=xtermSHELL=/bin/bashXDG_SESSION_COOKIE=d3194bb0b9dac9419f2d00d200000009-1502412776.464108-1366998638WINDOWID=60820196OLDPWD=/home/tarena...几个操作环境变量的函数getenv(3)#include <stdlib.h>char *getenv(const char *name);功能:找到名字为name的环境变量,返回一个指针(该字符串值的首地址)(即获取环境变量的值)参数:name:指定了环境变量的名字返回值: NULL 找不到匹配的找到了就返回环境变量值字符串的首地址举例:环境变量的操作(env_op.c)#include <stdio.h>#include <stdlib.h>int main(void) {printf("%s\n", getenv("name"));return 0;}tarena@ubuntu:~/day/day31$ a.out Beijing注意:环境中得有name变量才可以,否则是段错误(返回NULL)putenv(3)#include <stdlib.h>int putenv(char *string);功能:增加或改变环境变量的值参数:string:必须遵循name=value格式,如果name不存在,增加环境变量列表,如果存在,改变环境变量的值为value返回值:成功 0失败 非0举例:接上例#include <stdio.h>#include <stdlib.h>int main(void) {putenv("CHINA=beijing");printf("%s\n", getenv("CHINA"));return 0;}tarena@ubuntu:~/day/day31$ a.out beijingtarena@ubuntu:~/day/day31$ env|grep CHINA没有值但是: 在env中察看变量是查不到的原因: a.out是bash子进程,在子进程里添加了环境变量,但是父进程是无法继承子进程的环境变量的,程序执行结束后用env察看环境变量时是在bash进程下,所以没有setenv(3)#include <stdlib.h>int setenv(const char *name, const char *value, int overwrite);功能:增加或改变一个环境变量参数:name:指定环境变量的名字value:指定环境变量的值overwrite:如果环境变量存在,overwrite设置为非0的情况下,改变环境变量的值为value如果overwrite设置为0,环境变量的值不改变返回值:0 成功-1 错误 errno被设置int unsetenv(const char *name);功能:删除环境变量参数:name:指定要删除的环境变量返回值:0 成功-1 错误 errno被设置举例:#include <stdio.h>#include <stdlib.h>int main(void) {printf("%s\n", getenv("name"));putenv("CHINA=beijing");printf("before...%s\n", getenv("CHINA"));setenv("CHINA", "Nanjing", 1);printf("after...%s\n", getenv("CHINA"));unsetenv("name");printf("%s\n", getenv("name"));return 0;}overwrite=0:tarena@ubuntu:~/day/day31$ a.out Beijingbefore...beijingafter...beijing //如果overwrite设置为0,环境变量的值不改变段错误 (核心已转储)   //删除后变量没有了,指向NULL,产生段错误overwrite=1:tarena@ubuntu:~/day/day31$ a.out Beijingbefore...beijingafter...Nanjing //为非0的情况下,改变环境变量的值为value段错误 (核心已转储)clearenv(3)#include <stdlib.h>int clearenv(void);功能:清楚环境变量参数:无返回值:0 成功非0 失败

【C语言】【unix c】环境变量(续)相关推荐

  1. Go 语言运行时环境变量快速导览

    原文: http://dave.cheney.net/2015/11/29/a-whirlwind-tour-of-gos-runtime-environment-variables Go 语言运行时 ...

  2. 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld

    第一章 Java语言概述.环境变量和HelloWorld 文章目录 第一章 Java语言概述.环境变量和HelloWorld 一.Java语言概述 1.Java简介 2.Java发展历史 3.Java ...

  3. Go 语言运行时环境变量快速

    Go 语言运行时环境变量快速导览 Go Runtime除了提供:GC, goroutine调度, 定时器,network polling等服务外, 还提供其它一些工具设施,用于开启额外的调试输出, 或 ...

  4. go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径

    Go 环境变量 Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们.如果你使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/go  ...

  5. c语言环境变量的作用,C语言程序的环境变量

    环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如path,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path ...

  6. R语言设置java环境变量

    前些日子在R中调用h2o包,在执行h2o.init()链接h2o平台时,提示java有问题,大约说是版本不合,让我去下载最新版本,后来下了也没用,还是提示相同的错误,试了好几次还是不行,最后请教大佬才 ...

  7. go语言:一些环境变量

    直接不翻译了 The Go compilation environment can be customized by environment variables. None is required b ...

  8. UNIX再学习 -- 环境变量

    之前讲gcc编译的时候,参看:C语言再学习 -- GCC编译过程 提到过静态库和共享库,那时只是简单的讲了下它们相关的编译链接,接下来就该详细介绍它们了.不过再讲解之前还需了解一下编程相关的环境变量. ...

  9. RHEL6基础之六RHEL6基本命令bash常用快捷键变量环境变量命令的返回值

    命令帮助信息获取 sh 执行脚本 -x选项来查看这个脚本执行过程的 [root@localhost ~]# sh 1.sh [root@localhost ~]# sh -x 1.sh [root@l ...

  10. 第一节:开发工具介绍及环境变量配置(讲师笔记篇)

    01.01_计算机基础知识(计算机概述)(了解) A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代 ...

最新文章

  1. perl脚本发送邮件
  2. 自定义ServicesLoader来实现根据配置使用不通的SPI实现从而实现项目扩展
  3. ahk编程_AHK编程可视化的实现
  4. 探索SwitchYard 2.0.0.Alpha2快速入门
  5. 第一次执行时没有问题,重复执行会出错、GP循环
  6. 百度地图显示服务器地址,百度地图_根据地图上标记位置获取街道信息,以及经纬度信息...
  7. centos下mysql执行命令_CentOS下mysql数据库常用命令总结
  8. 农业银行王敬东——金融科技时代商业银行战略模式选择初探
  9. 软件测试人员的简历是什么样子的?
  10. YUV和RGB调节色彩公式
  11. 概要设计 重要性_艺术留学——服装设计
  12. 用微信小程序加市面上的网络摄像头实现视频会议
  13. Airflow Architecture
  14. Android播放音乐案例分享
  15. 大数据介绍项目流程_大数据介绍
  16. html诗集代码简单,自制简单的诗歌搜索系统
  17. 字符数据在内存中的存储形式及其使用方法
  18. nodejs __dirname 与 process.cwd(); 的区别
  19. 在Linux上安装Git
  20. python 获取qq群成员信息_Python-获取QQ群成员信息并存入excel及redis并发送邮件

热门文章

  1. 文件服务器管理软件有哪些,​共享文件管理软件有哪些功能?
  2. c语言程序设计库搜索app,C语言编程宝典app
  3. matlab randi 函数,急求MATLAB的randi函数源代码,我的7.1没有,谢谢谢谢
  4. Linux系统上hdparm工具参数详解,硬盘检查、测速、设定和优化
  5. 测试代理IP有效性的几种方式-芝麻ip
  6. 【远程办公】外网远程访问公司内网用友畅捷通T财务软件
  7. LDO与DCDC这次给它彻底搞懂
  8. 将前端技术栈移植到掌上游戏机
  9. UI自动化测试-pytest框架
  10. 用MybatisPlus代码生成器生成代码