如何用c设置Raspberry Pi上的时间和日期?

时间:2015-07-16 13:00:34

标签: c++ c time raspberry-pi

我使用Busware中的扩展名SD0作为Raspberry Pi。 On就是OS Raspbian。 Raspberry Pi没有互联网连接。 SD0包含RTC ds1338

如何用语言C或C ++设置Raspberry Pi的时间和日期?
我或多或少知道如何通过I2C连接。

3 个答案:

答案 0 :(得分:2)

您始终可以在C代码中调用命令行工具:

settimeofday(timeval, NULL);
system("hwclock --systohc")

或者您可以通过ioctl接口直接访问您的rtc设备驱动程序。 (http://lxr.free-electrons.com/source/include/uapi/linux/rtc.h

示例:

struct rtc_time rtc = {};
tnow.tm_year = 2015; /* fill up entire struct */
int fd = open("/dev/rtc0", O_RDWR)
ioctl(fd, RTC_SET_TIME, &tnow);
close(fd);

答案 1 :(得分:2)

如果这是您要问的问题:settimeofday(2)系统调用会在Unix上设置时间。 你需要成为root用户才能这样做。松散:

#include <sys/time.h>
struct timeval tv;
tv.tv_sec = seconds since 1 jan 1970;
tv.tv_usec = 0; /* microseconds */
if(settimeofday(&tv, NULL) == 0)// it was ok

请参阅mktime(3)了解如何在C中将日期转换为秒。

答案 2 :(得分:2)

除了使用库中的settimeofday()之外我还想添加您想要确保在pi上配置I2C并在pi上打开ds1338时钟的驱动程序,看这里: https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=25399

我假设你会做类似的事情:

modprobe i2c-bcm2708
echo ds1338 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
modprobe rtc-ds1338
hwclock -s

非常酷的entension board btw,不知道这个聪明的读者存在。