gpt4 book ai didi

c - 如何使用 settimeofday(2)?

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:48 26 4
gpt4 key购买 nike

我在这里做错了什么?我希望 settimeofday() 更改系统时间,而不是返回 EINVAL

$ uname -a
Linux io 4.3.5-300.fc23.x86_64 #1 SMP Mon Feb 1 03:18:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ cat settimeofday.c
#include <sys/time.h>
#include <stdio.h>

int main()
{
struct timeval tv = {0, 0};
if (settimeofday(&tv, 0) == -1)
perror("settimeofday");
}
$ gcc settimeofday.c
$ sudo ./a.out
settimeofday: Invalid argument

错误来自运行 Fedora 23 的 Thinkpad T450。相同的代码在 OS X 上运行良好。

编辑

澄清一下,该命令是以 root 身份执行的:

# whoami
root
# sudo ./a.out
settimeofday: Invalid argument

如预期的那样,如果我以普通用户身份运行该程序,我得到的是 EPERM 而不是 EINVAL:

$ ./a.out 
settimeofday: Operation not permitted

最佳答案

提交 e1d7ba于 2015 年年中引入 Linux 内核并限制 tv_sec 字段的值。该限制受系统正常运行时间的影响——有关详细信息,请参阅提交消息和相关的 LKML 讨论。

这就是导致 settimeofday 调用返回 EINVAL 的原因,并解释了代码在 OS X 和旧版 Linux 机器上运行的原因。

关于c - 如何使用 settimeofday(2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35353766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com