问题标签 [timespec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C中long的减法会失去精度?
我确信答案很简单,但我不太明白。我正在尝试struct timespec
使用以下代码计算两者之间的增量:
但是,输出总是类似于Elapsed time: 0.300876000 seconds.
这似乎表明我正在丢失纳秒的最后三位数字(因为这些数字不应该总是为零)。有人能指出是什么原因造成的吗?
c - 使用 struct timespec 检索 Linux 时间
有人可以建议我如何使用
结构时间规范
类型?它只是给了我自 Epoch 以来的时间。我可以使用这种数据类型获得实际的 Linux 时间吗?
简要背景:我正在嵌入式设备上编写一个记录器实用程序,时间戳分辨率以毫秒/微秒为单位。源添加了目标组件使用的时间戳。
目标组件正在文件/控制台上打印此日志时间戳。但是打印出来的日期是自 Epoch 以来的时间,而不是实际的 Linux 日期。
打印数据为:1970-01-01 23:30:07.586864475
然而,Linux 日期不同,如下所示:
root@imh:# 日期
2017 年 11 月 14 日星期二 11:34:12 UTC
它不是格式问题。它是关于获取当前的 Linux 时间(以纳秒为单位)。
c++ - 如何正确地将 timespec 转换为 timeval?
我有一个struct timespec
对象需要转换为struct timeval
用于lutimes(...)
.
我尝试了以下操作,但lutimes()
抱怨。
现在EINVAL
fromlutimes
表示 usec 组件在 之外0 <= tv_usec < 1000000
,这意味着转换 fromtimespec
出错了。[资源]
我如何正确转换timespec
为timeval
?
使用该命令进行更彻底的调试会touch
显示timespec
包含tv_sec = 0
and tv_nsec > 1000000000
,当没有指定特定日期并且应该使用当前时间时。
为什么是这样?处理这个问题的正确方法是什么?
c - 大尺寸输入数组的 C 程序崩溃(分段错误)。如何在不使用静态/全局/malloc 的情况下防止它?
以下程序是使用heapsort对大量随机数进行排序。程序的输出是递归heapSort函数的总执行时间(以微秒为单位)。输入数组的大小由SIZE宏定义。
该程序适用于高达 100 万(1000000)的SIZE 。但是当我尝试执行SIZE 1000 万(10000000)的程序时,程序会产生分段错误(核心转储)。
注意:我已经尝试在 Linux (128 MB) 上使用ulimit -s命令增加堆栈的软限制和硬限制。SEGFAULT 仍然存在。
请建议我对所需的代码进行任何更改或任何可以克服现有 SEGFAULT 弊端的方法,而无需动态声明数组或将数组声明为全局/静态。/* 实现堆排序算法的程序 */
c++ - sem_timedwait 导致“futex 工具返回了意外的错误代码”
这段代码有什么问题?当 sem 对象发布时,它很好。但是,一旦需要等待超时,我就会收到“futex 工具返回了意外的错误代码”。
c - timespec_get 的源代码在哪里?
C11
标准提供timespec_get
功能。如果我在 cppreference 或我的计算机上运行示例代码,它可以工作:
但是,如果我在这里查看 glibc 的来源,代码如下:
哪个......不应该工作......
这就引出了一个问题:timespec_get
实际调用的源代码在哪里?
c - 为什么我的 Mac 上的任何 C 编译器都没有定义 timespec_get?
根据 C11 标准 (7.27.2.5),timespec_get
在time.h
. 我试过几个编译器,包括clang和几个版本的gcc,应该支持C11,但是这个功能总是缺失。宏TIME_UTC
也不见了。
这是一个测试文件mytime.c
:
以及使用 Clang 的输出:
我注释掉了这timespec_get
条线,以确保我使用的是 C11,而且我是。
对于 gcc 版本 4.8、5 和 6,我得到基本相同的结果。
我使用的是 Mac,OS 10.11.6。
c - 将自纪元以来的本地时间(以秒为单位)转换为 UTC
在我的系统中,我有一台 PC(Linux,以防万一),它将 RTC 时间保持在 UTC,使我的本地时区特定。在 PC 代码中,我得到 UTC 时间为自纪元以来的秒数
我还有一个第 3 方网络设备,它提供的时间也是从纪元开始的秒数,但它使用本地时间而不是 UTC 时间来提供。这是一个问题,因为当我在交错日志中打印两个时间戳以及来自 PC 和此设备的时间戳时,即使两个时钟显示相同的本地时间,时间戳也会关闭。
假设 PC 和此设备之间的时区设置(UTC 偏移和夏令时规范)相同。我将如何获取设备提供的纪元以来的秒数(本地时间)并将其转换为 UTC 纪元以来的秒数?换句话说,当该数字在本地时间时,将 PC 时区设置应用于自纪元以来的秒数的编程(C 语言)方式是什么?
这是我尝试将第 3 方设备基于本地时间的秒数自纪元以来转换为基于 UTC 的自纪元以来的秒数。
以上不起作用。它打印
如您所见,转换后的设备时间戳不等于 PC 时间戳。这应该怎么做?
c - 在 Linux 上使用“timespec_get()”返回的“tv_nsec”纳秒组件作为 C 中的随机数生成器的可行性?
使用以下简单的代码片段:
我得到这样的输出:
58, 1, 74, 49, 5, 59, 89, 20, 52, 86, 17, 48, 79, 10, 41, 73, 3, 40, 72, 3, 36, 67, 98, 30, 61, 92, 24, 55, 86, 17, 49, 82, 14, 45, 76, 7, 40, 72, 3, 36, 71, 2, 35, 66, 97, 28, 66, 97, 28, 60, 90, 22, 52, 83, 15, 46, 77, 7, 41, 72, 3, 36, 67, 0, 44, 17, 82, 13, 45, 77, 8, 59, 90, 22, 54, 85, 17, 48, 80, 12, 43, 75, 6, 57, 89, 20, 52, 84, 15, 47, 79, 14, 50, 82, 16, 47, 79, 11, 43, 74,
我没有研究数字的统计分布,我的搜索结果是空白的,但乍一看,输出确实类似于rand()
or的输出random()
。有没有人研究过这个或能够发表意见 - 可以timespec_get()
用作随机数生成器?会不会是伪随机的?为什么?
c - 为什么 time() 报告的时间有时比 C 代码中 timespec_get() 的秒组件慢 1 秒?
以下代码片段:
产生这个输出:
cTime
为什么和之间的差异ts.tv_sec
?请注意,如果将条件更改为 ,则不会出现此问题ts.tv_nsec >= 3000000
。该问题依赖于小于 3000000 的纳秒。