Linux环境下系统函数的使用

本文详细介绍了C语言中处理时间与日期的函数,包括tm结构体、time、gmtime、asctime、localtime等,并探讨了它们的使用注意事项。同时,还讲解了环境控制函数getenv和setenv以及内存分配函数malloc、calloc、getpagesize和mmap的使用方法,为理解和操作系统时间、环境变量及内存管理提供了基础指导。
摘要由CSDN通过智能技术生成

系统时间与日期函数的使用

tm结构体

tm结构体中定义了有关时间的一些信息,结构如下:

struct tm{
	int tm_sec; //当前的秒数,0-59
	int tm_min; //当前的分数,0-59
	int tm_hour; //当前的时数,0-23
	int tm_mday; //当前月份的日数
	int tm_mon; //当前的月份
	int tm_year; //从1900年至今的年数
	int tm_wday; //星期,从星期一开始,0-6
	int tm_yday; //从今年1月1日至今的天数,0-365
	int tm_isdst; //是否为夏时制时间,取值为-1,0,1(-1表示和系统设置相同)
};

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参数必须指定其一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值