localtime localtime_r


localtime和localtime_r

函数原型

localtime 用于将simple calender time 转换为broken-down time, 如果调用成功将返回一个指向struct tm结构的静态地址,而这是可以被其他函数所重写的, 所以在从这点可以看出 ,它是不安全,所以localtime_r的出现就是为了解决这一问题,
从函数原型可以看出 , localtime_r比localtime多个result的形参(这不就是_r尾缀的由来?),将原本的静态地址的tm数据结构传到用户定义的结构里面, 如果成功调用,返回值将和传入的结构地址相同。同时要注意的是, 如果转换失败, 出现数据溢出情况, 返回值为null。

c++中localtime中的支持情况

localtime_r只在linux平台上可用, windows平台只能用localtime_s,而在c++的标准库中没有一个统一的标准, 只能依赖于c语言的localtime,所以在写c++多线程程序中不可避免的就要判断是否支持线程安全的localtime。
好消息是c++20的chrono库中的zoned_time已经弥补了这块。

#include <chrono>
#include <iostream>

int
main()
{
    namespace chr = std::chrono;

    chr::zoned_time local_time{chr::current_zone(), chr::system_clock::now()};
    std::cout << local_time << '\n';
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM