eglibc:以毫秒为单位获得正常运行时间
eglibc: Getting Uptime in Milliseconds
我想写一个与内核日志格式相同的日志输出:
[ 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()
return 是正常运行时间 - 但粒度以秒为单位 - 但我需要更多...
更新:It seems clock_gettime(CLOCK_REALTIME, &ts)
应该做我想做的...但是 eglibc 似乎return CLOCK_MONOTONIC
代替。
想法是首先为您的 CLOCK_MONOTONIC 找到偏移量。
为此,只需阅读 /proc/uptime
一次。
然后使用偏移量和 CLOCK_MONOTONIC 打印每个记录事件的时间。
我想写一个与内核日志格式相同的日志输出:
[ 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()
return 是正常运行时间 - 但粒度以秒为单位 - 但我需要更多...
更新:It seems clock_gettime(CLOCK_REALTIME, &ts)
应该做我想做的...但是 eglibc 似乎return CLOCK_MONOTONIC
代替。
想法是首先为您的 CLOCK_MONOTONIC 找到偏移量。
为此,只需阅读 /proc/uptime
一次。
然后使用偏移量和 CLOCK_MONOTONIC 打印每个记录事件的时间。