【问题标题】:eglibc: Getting Uptime in Millisecondseglibc:以毫秒为单位获得正常运行时间
【发布时间】:2015-11-23 16:46:46
【问题描述】:

我想写一个与内核日志格式相同的日志输出:

[   11.947248] fsl-gianfar ffe24000.ethernet eth0: Link is Up

时间戳应该与内核时间具有相同的时间参考。这意味着,当日志消息在内核中发出的同时发出时,时间戳应该具有相同的值。

clock_gettime 有一个未定义的时钟起点 - 因此每个程序的时间戳都有不同的值 - 即使它们是同时创建的:

clock_gettime(CLOCK_REALTIME, &ts);
clock_gettime(CLOCK_MONOTONIC, &ts);

当使用gettimeofday 时,您会得到自 Unix 纪元以来的时间......这与定义不匹配。

函数localtime() 返回正常运行时间-但粒度以秒为单位-但我需要更多...


更新It seems clock_gettime(CLOCK_REALTIME, &ts) 应该做我想做的事...但 eglibc 似乎返回 CLOCK_MONOTONIC

【问题讨论】:

  • 读取/proc/uptime并不是每次日志调用的解决方案,getnstimeofday()只在内核空间可用...

标签: linux logging gettime gettimeofday eglibc


【解决方案1】:

首先要找到 CLOCK_MONOTONIC 的偏移量。 只需阅读一次/proc/uptime。 然后使用偏移量和 CLOCK_MONOTONIC 打印每个记录事件的时间。

【讨论】:

    猜你喜欢
    • 2012-01-11
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多