1.环境表的概念和使用
1.1 基本概念
环境表主要是指环境变量的集合,每个进程中都有一个环境表,用于记录与当前进程相关的环境变量信息
环境表采用字符指针数组的形式进行存储,然后使用全局变量char** envrion来记录环境表的首地址,使用NULL表示环境表的末尾
1.2 相关函数
(1)getenv函数
#include <stdlib.h>
char *getenv(const char *name);
函数功能:
主要用于根据参数name指定的环境变量名进行查找,如果查找成功则返回对应的环境变量值,否则返回NULL
(2)setenv函数
#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);
第一个参数:环境变量名
第二个参数:环境变量值
第三个参数:是否修改的标志
非0 - 表示允许修改环境变量的值
0 - 表示不允许修改环境变量的值
返回值:成功返回0,失败返回-1
函数功能:
主要用于 修改/增加 环境变量,如果参数name指定的环境变量不存在则增加,如果存在则修改
(3)putenv函数
#include <stdlib.h>
int putenv(char *string);
函数功能:
主要用于修改/增加环境变量,其中参数string的格式如下:name=value,成功返回0,失败返回非0
(4)unsetenv函数
int unsetenv(const char *name);
函数功能:
主要用于将参数name指定的环境变量从环境表中删除,如果删除一个不存在的环境变量时,则函数调用依然是成功的,只是环境表没有改变
(5)clearenv函数
#include <stdlib.h>
int clearenv(void);
函数功能:
主要用于将整个环境表全部清空
1.3 main函数的原型
int main(int argc,char* argv[],char* envp[])
第一个参数:命令行参数的个数
第二个参数:指针数组,存储命令行参数的地址
第三个参数:指针数组,环境表的首地址
例如:
(1)实现拷贝文件a.txt内容到文件b.txt中
a.打开文件a.txt和b.txt
b.读取a.txt中的内容写入到b.txt中
c.关闭文件a.txt和b.txt
(2)编写通用的拷贝程序
a.打开文件argv[1]和argv[2]
b.读取文件argv[1]中的内容写入到文件argv[2]中
c.关闭文件argv[1]和argv[2]
如:
a.out a.txt b.txt
=> 实现文件a.txt 到 b.txt的拷贝
a.out b.txt c.txt
=> 实现文件b.txt 到 c.txt的拷贝
1.1 基本概念
环境表主要是指环境变量的集合,每个进程中都有一个环境表,用于记录与当前进程相关的环境变量信息
环境表采用字符指针数组的形式进行存储,然后使用全局变量char** envrion来记录环境表的首地址,使用NULL表示环境表的末尾
1.2 相关函数
(1)getenv函数
#include <stdlib.h>
char *getenv(const char *name);
函数功能:
主要用于根据参数name指定的环境变量名进行查找,如果查找成功则返回对应的环境变量值,否则返回NULL
(2)setenv函数
#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);
第一个参数:环境变量名
第二个参数:环境变量值
第三个参数:是否修改的标志
非0 - 表示允许修改环境变量的值
0 - 表示不允许修改环境变量的值
返回值:成功返回0,失败返回-1
函数功能:
主要用于 修改/增加 环境变量,如果参数name指定的环境变量不存在则增加,如果存在则修改
(3)putenv函数
#include <stdlib.h>
int putenv(char *string);
函数功能:
主要用于修改/增加环境变量,其中参数string的格式如下:name=value,成功返回0,失败返回非0
(4)unsetenv函数
int unsetenv(const char *name);
函数功能:
主要用于将参数name指定的环境变量从环境表中删除,如果删除一个不存在的环境变量时,则函数调用依然是成功的,只是环境表没有改变
(5)clearenv函数
#include <stdlib.h>
int clearenv(void);
函数功能:
主要用于将整个环境表全部清空
1.3 main函数的原型
int main(int argc,char* argv[],char* envp[])
第一个参数:命令行参数的个数
第二个参数:指针数组,存储命令行参数的地址
第三个参数:指针数组,环境表的首地址
例如:
(1)实现拷贝文件a.txt内容到文件b.txt中
a.打开文件a.txt和b.txt
b.读取a.txt中的内容写入到b.txt中
c.关闭文件a.txt和b.txt
(2)编写通用的拷贝程序
a.打开文件argv[1]和argv[2]
b.读取文件argv[1]中的内容写入到文件argv[2]中
c.关闭文件argv[1]和argv[2]
如:
a.out a.txt b.txt
=> 实现文件a.txt 到 b.txt的拷贝
a.out b.txt c.txt
=> 实现文件b.txt 到 c.txt的拷贝