Linux系统编程.NO2——环境变量与时间函数

1. 系统程序设计基础

1.1. 进程以及程序的存储结构

Linux的内存分了很多部分,以此来有效管理各种数据,有代码区,数据区,未初始化数据区(bss),堆(动态内存分配),栈(函数参数,返回值,局部变量等)。注意数据段,bss段的变量生存周期是整个进程的运行过程,局部变量生存周期是函数内部。

1.2. 命令行参数

main函数的完整格式是int main(int argc,char *argv[])(有时还有第三个参数表示环境变量)。argc表示参数个数,*argv[]表示各个参数,*argv[0]是函数名,*argv[argc]=null,中间的就是需要输入的参数,以字符串的形式输入。

1.3. 环境变量相关函数

使用命令set,export和env三个命令可以查看详细的环境变量,使用echo+$+环境变量名,可以查看某个环境变量。
增加一个环境变量可以用export+新环境变量名=value,删除就用unset+环境变量名。
1.char getenv(const char var);
函数功能是获取环境变量值。如果要定义一个变量来接受这个函数的返回值,那么一定要定义为字符指针,如char* x,x=getenv(“PATH”),这样X的值才是得到的结果,如果没有就返回NULL.
头文件是<stdlib.h>
2.void unsetenv(cosnt char var);
参数是变量名,即可删除一个环境变量。
头文件是<stdlib.h>
*3.int putenv(const char string);
函数用于修改环境变量,输入的字符串必须是“变量名=变量值”这样一个等式的字符串才可以,如putenv(“AGE=20”);
头文件是<stdlib.h>
**4.int setenv(const char var,const char val,int overwrite);
前两个参数是变量名和变量值,第三个参数是非0覆盖已存在的值,如果该变量本来存在,并且overwrite等于0,那么就对该变量不做修改保持原状,如果本来不存在那就不管它的值直接创建新变量,如果原本存在并且overwrite不等于0,那么就会覆盖之前的变量值,相当于做了修改,如setenv(“AGE”,”20”,1),需要注意的是这样的修改只是在这个程序中有用,需要真正修改环境变量就要在相关的环境变量配置文件中进行修改。
头文件是<stdlib.h>

1.4. 时间管理函数

Linux下的时间设置很复杂,Linux有三种表示方法:time_t(从1970年1月1日午夜开始计数的秒数值,是UTC),结构体时间struct tm,将时间分解为时分秒等等,还有字符串形式(命令date后的结果。)三种形式的时间可以相互转换:
在这里插入图片描述
在vim下涉及时间需要使用头文件<time.h>,time_t也是一种数据类型,函数
*1. time_t time(time_t t);
函数作用是得到当前的系统时间,time_t相当于一个long int类型,该函数得到的结果是从开始时间到当前系统时间的秒数。
time_t time1,x;
x= time(&time1);再打印x即是秒数。
头文件是<time.h>
*2. struct tm localtime(const time_t t);
函数功能是把time_t转换为本地时间。定义一个struct tm类型的指针来接收时间,如:
struct tm *time2;
time2=localtime(&time1),注意time2是指针,所以要显示它的成员要使用箭头,如printf(“%d”,time2->tm_year)。
头文件是<time.h>
**3. char ctime(const time_t t);
函数功能是把time_t类型转换为本地时间字符串。定义一个字符串指针来接收如:char *str;
str=ctime(&time1),str可以直接输出。
头文件是<time.h>

1.5. 错误代码errno

程序执行过程中可能会因为各种原因出错,所以可以通过一个全局的整型变量errno来区分究竟发生了什么类型的错误。errno的值为0表示没有错。使用这个变量需要头文件<errno.h>。在程序的过程中都可以打印出errno(int),它的值代表当前的错误类型。
*1.void perror(const char s);
函数功能根据当前errno打印errno对应的错误信息,参数填写自定义的提示信息,返回会打印出错误提示。
头文件是<stdio.h>
2.void exit(int x);
函数是中途退出时的中断函数。比如代码执行到某一步发生了错误那就不应该继续执行,而是中断退出,则写exit(-1),表示代码执行错误时退出。exit(0)表示正常退出。
exit()函数跟return的不同在于exit函数即使是在除main以外的函数中被调用,也会终止进程,如果身处递归,exit函数也将直接退出,而return则会递归到结束
另外exit()在关闭之前还会执行由atexit注册的终止函数,不过是读取到exit函数再倒回去执行注册函数,所以注册函数的实际执行数据,和写代码时的编写顺序是相反的,因为没有读取到exit函数是不会执行这些注册函数的。
头文件是<stdlib.h>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值