当前位置: 首页 > java >正文

Linux时间处理函数

gettimeofday 是 Linux 系统中一个用于获取当前时间的系统调用函数。它能够获取从 Unix 纪元(1970年1月1日 00:00:00 UTC)到当前时刻的秒数和微秒数。

函数原型

#include <sys/time.h>int gettimeofday(struct timeval *tv, struct timezone *tz);

参数说明

  • tv: 指向 struct timeval 结构体的指针,用于存储获取到的时间。
  • tz: 指向 struct timezone 结构体的指针,用于存储时区信息。注意:在现代 Linux 系统中,这个参数通常被忽略(应设为 NULL),因为内核不再使用它。

数据结构体

struct timeval {time_t      tv_sec;     /* 秒(从 Unix 纪元开始) */suseconds_t tv_usec;    /* 微秒(0 到 999,999) */
};struct timezone {int tz_minuteswest;     /* 格林威治以西的分钟数 */int tz_dsttime;         /* 夏令时标志 */
};

返回值

  • 成功时返回 0。
  • 失败时返回 -1,并设置 errno 错误码。

使用示例

#include <stdio.h>
#include <sys/time.h>int main() {struct timeval tv;if (gettimeofday(&tv, NULL) == 0) {printf("秒数: %ld\n", tv.tv_sec);printf("微秒: %ld\n", tv.tv_usec);} else {perror("gettimeofday");return 1;}return 0;
}

注意事项

  1. 精度gettimeofday 提供微秒级精度,但实际精度取决于系统硬件和内核实现。
  2. 时区参数:现代系统中,tz 参数应始终设为 NULL
  3. 线程安全gettimeofday 是线程安全的。
  4. 已废弃:虽然 gettimeofday 仍在广泛使用,但 POSIX 标准推荐使用更现代的 clock_gettime() 函数,它提供了更高的精度(纳秒级)和更多的时间源选择(如 CLOCK_REALTIMECLOCK_MONOTONIC 等)。

推荐替代方案

#include <time.h>int clock_gettime(clockid_t clk_id, struct timespec *tp);

clock_gettime 使用 struct timespec 结构体,提供纳秒级精度:

struct timespec {time_t   tv_sec;        /* 秒 */long     tv_nsec;       /* 纳秒 */
};

总的来说,gettimeofday 是一个经典且广泛使用的函数,但在新代码中建议优先考虑 clock_gettime

http://www.xdnf.cn/news/19162.html

相关文章:

  • 机器学习(三)sklearn机器学习
  • 第二阶段WinForm-11:自定义控件
  • Java全栈工程师的面试实战:从技术细节到业务场景
  • 在八月点燃AI智慧之火:CSDN创作之星挑战赛开启灵感盛宴
  • 04.《VLAN基础与配置实践指南》
  • Django Admin 管理工具
  • NSSCTF-[NISACTF 2022]string_WP
  • 身份证实名认证API集成—身份核验接口-网络平台安全合规
  • mitmproxy的使用初试
  • windows中Qwen3‑Coder 与 Claude Code 搭配使用
  • 《UE5_C++多人TPS完整教程》学习笔记45 ——《P46 待机与跳跃动画(Idle And Jumps)》
  • 【完整源码+数据集+部署教程】植物病害检测系统源码和数据集:改进yolo11-EMSCP
  • Lombok vs Java Record:谁才是未来?
  • week5-[二维数组]翻转
  • Node.js 的流(Stream)是什么?有哪些类型?
  • DBeaver 的 PostgreSQL 驱动包默认存储位置
  • 计算机网络知识--对称加密、非对称加密和数字证书详解
  • “上门做饭”平台的核心技术栈与运营壁垒是什么?
  • OpenCV之霍夫变换
  • Linux系统部署:Certbot 实现 Nginx 自动续期部署 Let‘s Encrypt 免费 SSL 证书
  • css三角形
  • 万字解析RAG(检索增强生成)系统的构建与优化,从基础架构逐步深入到高级技术
  • 深度学习入门Day10:深度强化学习原理与实战全解析
  • 虚拟机快照对内存与磁盘空间的影响
  • Git 合并冲突
  • C++ 编译和运行 LibCurl 动态库和静态库
  • 32.String str=aaa与 String str=new String(aaa)一样吗?new String(“aaa”);创建了几个字符串对象
  • Linux按键驱动开发
  • 明远智睿 RK3568 核心板:以硬核性能解锁多领域应用新可能
  • 手写一个Spring框架