1、getenv函数

  头文件:#include<stdlib.h>

  函数原型: char * getenv(const char* name);

  函数说明:getenv()用来取得参数name环境变量的内容。

  函数参数:name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name=value。

  返回值:若环境变量存在,返回环境变量值的指针,否则返回NULL

  

  例子:

 #include <stdlib.h>
#include <stdio.h>
int main()
{
char* path = NULL;
if((path = getenv("USER")))
printf("USER = %s\n", path); return ;
}

  执行的结果是USER = hxinuan,其中hxinuan是我个人计算机的名字

 2、putenv函数

  头文件:#include<stdlib.h>

  函数原型: int putenv(const char* str);

  函数说明:putenv用来改变或者增加环境变量的内容

  参数:str的格式为name=value,若环境原先存在,则环境变量值会依参数str改变,若不存在,则增加该环境变量

  返回值:成功返回0,错误返回-1.

  

  例子:

 #include <stdlib.h>
#include <stdio.h>
int main()
{
char* path = NULL;
if((path = getenv("USER")))
printf("USER = %s\n", path); putenv("USER=test"); if((path = getenv("USER")))
printf("USER = %s\n", path);
return ;
}

  执行的结果为:

  USER = hxinuan

  USER = test

  改变的环境的变量只在程序中有效,你在程序里做的改变不会反映到外部环境中,这是因为变量的值不会从子进程传播到父进程,这样做更安全。

3、setenv函数

  头文件:#include<stdlib.h>

  函数原型: int setenv(const char* name, const char* value, int overwrite)

  函数说明:setenv用来改变或者增加环境变量

  参数:name为环境变量名称字符串。 value则为变量内容,overwrite用来决定是否要改变已存在的环境变量。如果overwrite不为0,而该环境变量原已有内容,则原内容会被改为参数value所指的变量内容。如果overwrite为0,且该环境变量已有内容,则参数value会被忽略。

  返回值:成功返回0,错误返回-1.

  

  例子:

   

 #include <stdlib.h>
#include <stdio.h>
int main()
{
char* path = NULL;
if((path = getenv("USER")))
printf("USER = %s\n", path); setenv("USER", "test", ); if((path = getenv("USER")))
printf("USER = %s\n", path);
return ;
}

  执行的结果仍为:

  USER = hxinuan

  USER = test

  通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。如果在某一次运行程序时执行了setenv函数,进程终止后再次运行该程序,上次的设置是无效的,上次设置的环境变量是不能读到的。

4、unsetenv函数

  头文件:#include<stdlib.h>

  函数原型: int unsetenv(const char* name)

  函数说明:删除name环境变量的定义,即使不存在也不会出错

  参数:name为环境变量名称字符串。

  返回值:成功返回0,错误返回-1.

  

  例子:

 #include <stdlib.h>
#include <stdio.h>
int main()
{
char* path = NULL;
unsetenv("USER");
path = getenv("USER");
printf("USER = %s\n", path); return ;
}

  执行的结果:

  USER = (null)

linux之getenv putenv setenv和unsetenv详解的更多相关文章

  1. 环境变量篇getenv putenv setenv

    getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdlib.h> 定义函数 char * getenv(const ...

  2. linux系统的任务计划crontab使用详解

    linux系统的任务计划crontab使用详解 其实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了. 关于cron任务计划 ...

  3. Linux(centos)系统各个目录的作用详解

    Linux(centos)系统各个目录的作用详解 文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码 ...

  4. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  5. 轻松学习Linux之Shell文件和目录属性详解

    轻松学习Linux之Shell文件和目录属性详解 轻松学习Linux之理解Sitcky 轻松学习Linux之理解umask 轻松学习Linux之理解SUID&SGUID 本系列多媒体教程已完成 ...

  6. Linux进程实时IO监控iotop命令详解

    介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...

  7. Linux服务器,服务管理--systemctl命令详解,设置开机自启动

    Linux服务器,服务管理--systemctl命令详解,设置开机自启动 syetemclt就是service和chkconfig这两个命令的整合,在CentOS 7就开始被使用了. 摘要: syst ...

  8. Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】

    转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...

  9. Linux中redis安装配置及使用详解

    Linux中redis安装配置及使用详解 一. Redis基本知识 1.Redis 的数据类型 字符串 , 列表 (lists) , 集合 (sets) , 有序集合 (sorts sets) , 哈 ...

随机推荐

  1. C/C++互相调用

    参考: http://www.cnblogs.com/Yogurshine/p/3913073.html http://blog.chinaunix.net/uid-24118190-id-29853 ...

  2. Resolving multicopy duplications de novo using polyploid phasing 用多倍体相位法解决多拷贝复制的新问题

    抽象.虽然单分子测序系统的兴起已经实现组装复杂地区的能力空前提高在基因组中,基因组中的长节段重复仍然是装配中具有挑战性的前沿. 分段重复同时具有丰富的基因并且倾向于大的结构重排,使得它们的序列的分辨率 ...

  3. [Selenium]怎样验证页面是否有无变化

    验证方法:将两次的Dom结构进行对比 String beforeStr = (String) SeleniumUtil.getInnerHTML(page.getDriver(), page.getD ...

  4. sklearn中决策树算法DesiciontTreeClassifier()调用以及sklearn自带的数据包sklearn.datasets.load_iris()的应用

    决策树方法的简单调用记录一下 clf=tree.DecisionTreeClassifier() dataMat=[];labelMat=[] dataPath='D:/machinelearning ...

  5. promise、resolve、reject、拦截响应

    Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性.其核心是,promise是一个带有then()函数的对象. 使用promise机 ...

  6. 共享keychain数据

    [共享keychain数据] 当往keychain中插入数据时,默认的 kSecAttrAccessGroup 就是App自身的BundleID. [官方文档] You can add a keych ...

  7. 前端传递对象列表到WebApi

    public Int64 objectPOC(JObject jsonWrapper) { dynamic jsonValues = jsonWrapper; JArray jsonInput = j ...

  8. 用OLEDB读取EXCEL时,单元格内容长度超过255被截断

    https://support.microsoft.com/zh-cn/help/189897/data-truncated-to-255-characters-with-excel-odbc-dri ...

  9. NLog日志框架简写用法

    本文转载:http://www.blogjava.net/qiyadeng/archive/2013/02/27/395799.html 在.net中也有非常多的日志工具,今天介绍下NLog.NLog ...

  10. ISE、vivado、QuartusII调用notepad++、UE汇总(整理)

    我已经用惯了notepad++编写Verilog代码,很喜欢这款编辑器,功能真的非常强大.所以,当需要对vivado.ISE或quartus ii中的工程进行Verilog代码上的编写或修改时,只需双 ...