【发布时间】:2018-07-19 11:10:01
【问题描述】:
我有一个struct timespec 对象,我需要将其转换为struct timeval 以与lutimes(...) 一起使用。
我尝试了以下操作,但 lutimes() 抱怨。
const struct timespec ts; // originally provided as function parameter from FUSE
struct timeval tv;
tv.tv_sec = ts.tv_sec;
tv.tv_usec = ts.tv_nsec / 1000;
lutimes(path, tv); // returns -1; errno=EINVAL
现在 lutimes 中的 EINVAL 表示 usec 组件在 0 <= tv_usec < 1000000 之外,这意味着从 timespec 的转换出错了。 [source]
如何正确地将timespec 转换为timeval?
使用touch 命令进行更彻底的调试,发现timespec 包含tv_sec = 0 和tv_nsec > 1000000000,但未指定具体日期且应使用当前时间。
这是为什么?处理这个问题的正确方法是什么?
【问题讨论】:
-
此代码无法编译。
lutimes函数将 array of twotimevals 作为第二个参数。您应该发布您的实际代码。 -
@michalsrb 我知道,如果你真的想尝试这个,只需给它两次相同的 timeval(这应该将访问时间和修改时间设置为相同的值)。我应该更改我的示例代码吗?
-
最好显示给你 EINVAL 错误的实际代码。
-
@michalsrb 当然,它在gitlab.com/Cobra_Fast/maidfs/blob/…,我已经设法解决了:gitlab.com/Cobra_Fast/maidfs/blob/…,但我仍然想知道如何正确地做到这一点。
标签: c++ data-conversion fuse timeval timespec