系统时间与日期函数的使用
tm结构体
tm结构体中定义了有关时间的一些信息,结构如下:
struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
time函数
函数名 | time |
---|
头文件 | #include<time.h> |
功能 | 取得当前时间 |
函数原型 | time_t time(time_t *t) |
传入值说明 | 如果t不是NULL,则会将结果保存至t所指的内存中 |
返回值 | 成功返回从1970年1月1日0时0分0秒至今的秒数,失败返回-1 |
gmtime函数
函数名 | gmtime |
---|
头文件 | #include<time.h> |
功能 | 将timep转换成格林尼治时间 |
函数原型 | struct tm* gmtime(const time_t* timep) |
返回值 | 成功返回转换结果所指的结构体tm指针,失败返回NULL |
asctime函数
函数名 | asctime |
---|
头文件 | #include<time.h> |
功能 | 将时间和日期以字符串格式表示 |
函数原型 | char* asctime(const struct tm* timeptr) |
备注 | 返回的字符串格式为"Wed jun 30 21:49:08 2022" |
localtime函数
函数名 | localtime |
---|
头文件 | #include<time.h> |
功能 | 取得当地的时间和日期 |
函数原型 | struct tm* localtime(const time_t* timep) |
注意点
如果上述函数返回的是一个结构体tm指针,返回的一块专门用于保存该变量的共享内存地址,每次调用会将这块专门的内存进行覆盖重写,因此在使用的过程中如果希望将内容进行保存,则需要复制一份内容,否则在下次调用类似函数(只要是返回tm指针的)的时候就会将上一次的内容进行覆盖。
下面是一个验证程序,两个函数是共享这块地址的
#include <time.h>
#include <stdio.h>
int main()
{
time_t t = time(NULL);
struct tm *t1, *t2;
t1 = gmtime(&t);
t2 = localtime(&t);
printf("%d\n", t1);
printf("%d\n", t2);
printf("%d %d", t1->tm_hour, t2->tm_hour);
return 0;
}
输出结果
-1086341824
-1086341824
10 10
环境控制函数
getenv函数
函数名 | getenv |
---|
头文件 | #include<stdlib.h> |
功能 | 获取环境变量的内容 |
函数原型 | char* getenv(const char* name) |
传入值说明 | 传入环境变量名 |
返回值 | 如果存在对应的环境变量则返回其内容的字符串,否则返回NULL |
setenv函数
函数名 | setenv |
---|
头文件 | #include<stdlib.h> |
功能 | 改变或增加环境变量 |
函数原型 | int setenv(const char* name, const char* value, int overwrite) |
传入值说明 | overwrite有两种取值(0,1),取值为0表示忽略value参数,取值为1则修改name环境变量的内容为value |
返回值 | 执行成功返回0,失败返回-1 |
内存分配函数
malloc函数
函数名 | malloc |
---|
头文件 | #include<stdlib.h> |
功能 | 申请内存空间 |
函数原型 | void * malloc(size_t size) |
传入值说明 | 申请的内存大小为size字节 |
返回值 | 成功返回申请内存的指针,失败返回NULL |
备注 | 不会对内存作初始化 |
calloc函数
函数名 | calloc |
---|
头文件 | #include<stdlib.h> |
功能 | 申请内存空间 |
函数原型 | void * calloc(size_t nmemb, size_t size) |
传入值说明 | 申请的内存大小为nmemb*size字节 |
返回值 | 成功返回申请内存的指针,失败返回NULL |
备注 | 申请成功会将内存初始化为0 |
getpagesize函数
函数名 | getpagesize |
---|
头文件 | #include<unistd.h> |
功能 | 获取系统内存分页大小 |
函数原型 | size_t getpagesize() |
返回值 | 返回内存分页的大小 |
mmap函数
函数名 | mmap |
---|
头文件 | #include<unistd.h> #include<sys/mman.h> |
功能 | 将文件内容映射到内存中,对内存的读写就是对文件的读写 |
函数原型 | void * mmap(void *start, size_t length, int prot, int flags, int fd, off_t offsize) |
传入值说明 | start指向对应的内存起始地址,通常为NULL,由内核进行分配 length代表将文件中多大的内容进行映射 prot取值:
- PROT_EXEC 映射区域可被执行
- PROT_READ 映射区可被读取
- PROT_WRITE 映射区可被写入
- PROT_NONE 映射区不能读写
flags取值:
- MAP_FIXED start指向的地址无法成功建立映射时,放弃映射,不对地址作修正
- MAP_SHARED 将映射区的写入数据写回文件,且允许其他映射该文件的进程共享
- MAP_PRIVATE 对映射区的修改不会写回文件
offsize表示文件映射的偏移量,0表示从文件头开始 |
返回值 | 成功返回映射区的内存起始地址,失败返回-1(MAP_FAILED) |
备注 | MAP_SHARED和MAP_PRIVATE参数必须指定其一 |