首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地将timespec转换为timeval?

如何正确地将timespec转换为timeval?
EN

Stack Overflow用户
提问于 2018-02-08 19:04:21
回答 1查看 1.4K关注 0票数 0

我有一个struct timespec对象,我需要将其转换为struct timeval,以便与lutimes(...)一起使用。

我尝试了以下方法,但是lutimes()抱怨道。

代码语言:javascript
复制
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

现在,来自EINVALlutimes意味着usec组件在0 <= tv_usec < 1000000之外,这意味着来自timespec的转换出错了。[来源]

如何正确地将timespec转换为timeval

使用touch命令进行更彻底的调试,会发现timespec包含tv_sec = 0tv_nsec > 1000000000,此时没有指定特定日期,应该使用当前时间。

为什么会这样呢?处理这件事的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-08 20:36:37

首先,我将从问题中澄清我不清楚的是什么:这是fuse文件系统中utimens操作的实现,问题是有时tv_nsec字段的值大于或等于1,000,000,000。

我猜想它是两个特殊值之一:UTIME_NOWUTIME_OMIT

fuse文档指向utimensat手册页面,其中包含对这些特殊值的解释:http://man7.org/linux/man-pages/man2/utimensat.2.html

还可以检查linux内核中的nsec_valid函数:

https://elixir.free-electrons.com/linux/v4.15.2/source/fs/utimes.c#L40

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48692979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档