gpt4 book ai didi

c++ - 如何在没有 root 权限的情况下更改 Linux 系统时间?

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:38 25 4
gpt4 key购买 nike

我的场景如下:我有一个 C++ 应用程序,它访问 radio 接收器以从中获取时间信号,然后根据 radio 信号的时间更新系统时间。为了安全起见,该应用程序不得以root权限运行。看完this advice from a forum thread ,我尝试了这样的代码片段:

tm              current_time;
struct timeval *epoch = new timeval;

// current_time is filled with time data from the radio tuner here.

epoch -> tv_sec = mktime (&current_time);
epoch -> tv_usec = 0;

if (difftime (epoch -> tv_sec, mktime (&this -> last_system_time_update)) > (time_t) receiver::SYSTEM_TIME_UPDATE_INTERVAL) {
retval += setgid ((uid_t) 0);
retval += setuid ((uid_t) 0);
retval += prctl (PR_SET_KEEPCAPS, 1L, 0L, 0L, 0L);
retval += setgid (group_id);
retval += setuid (user_id);
retval += settimeofday (epoch, NULL);
}

与建议相反,当我不以 root 身份运行时,此代码段将不起作用。我总是得到 errno = 1。

这是怎么回事?并且:有解决方法吗?

最佳答案

您仍在尝试获取 root 权限。如果您有 CAP_SYS_TIME 功能,您只需要 settimeofday()。

if (difftime (epoch -> tv_sec, mktime (&this -> last_system_time_update)) > 
(time_t) receiver::SYSTEM_TIME_UPDATE_INTERVAL) {
retval += settimeofday (epoch, NULL);
}

关于c++ - 如何在没有 root 权限的情况下更改 Linux 系统时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53451142/

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