linux 如何在Rust中设置系统时钟?

xzv2uavs  于 12个月前  发布在  Linux
关注(0)|答案(1)|浏览(172)

对于业余无线电领域的一天,我有一个GPS软件狗,我想用它来设置我的Linux笔记本电脑的系统时间,当我在内地,那里没有互联网接入。
如何在Rust中设置系统时钟时间?
PS:我检查了crates.io,但没有什么对我来说是一个解决方案。

ars1skjm

ars1skjm1#

因为这看起来不像是“我想写一个可靠的库”,而更像是“把它整合在一起”,所以有几个选项,一些黑客:

  • 你可以直接使用coreutils的date
std::process::Command::new("date")
    // Produce the date string with some crate: date, chrono, hifitime, ...
    .args(["--set", "2023-12-14 01:23:45.678"])
    .env_clear()
    .env("LC_ALL", "C.UTF-8")
    .output()

字符串
Playground
(See关于准确性的评论!)

  • 你可以用strace运行date,然后看到它使用了clock_settime系统调用。通常,你可以在nix crate中找到该系统调用的safe and nicely typed wrapped version。如果找不到,就使用check libc
  • 有一个coreutils的rust重实现(也出现在search中),你可以检查一下它是做什么的。

当然,所有这些都需要适当的权限,当然,要么是root,要么有一个能力集。
旁注:我完全同意@n0rd的评论,我不知道你是如何从你的gps加密狗阅读的,但是如果它已经是gpsd就没有意义了,如果它是一些低级的方法,我想你会遇到有趣的问题(想到Week number rollover)。

相关问题