linux系统中防止系统时间,设置系统时间与在Linux中

本文探讨了如何将GPS数据中的timestamp_t结构转换为Linux系统的timeval结构,并通过settimeofday函数设置系统时间。作者详细介绍了timestamp_t与timeval之间的差异及转换方法。
摘要由CSDN通过智能技术生成

设置系统时间的GPS timestamp_t结构与GPS在Linux的设置系统时间与在Linux中 timestamp_t结构

大家好,

我想,一旦我得到一个succesfull GPS锁定(写代码Adafruit Ultimate GPS w/GPSD)我设置了系统时间。现在,我可以看到'timestamp_t':

typedef double timestamp_t; /* Unix time in seconds with fractional part */

是我的“gps_data_t *”结构的一部分。这是一个良好的开端,但是,功能我计划使用任何设置Linux系统时间为:

int settimeofday(const struct timeval *tv, const struct timezone *tz);

我已经找到了如何转换的time_t为* timeval中的信息,但是我应该怎么处理这双重将其转换为* timeval?

代码:

gpsmm gps_rec("localhost", DEFAULT_GPSD_PORT);

if (gps_rec.stream(WATCH_ENABLE|WATCH_JSON) == NULL) {

std::cout << "No GPSD running. exiting GPS thread." << std::endl;

return;

}

//Data structure

struct gps_data_t* newdata;

//Loop until first GPS lock to set system time

while ((newdata = gps_rec.read()) == NULL) {

//Wait for a valid read

}

//Set system time - timestamp_t vs timeval?

timeval *tv{?? newdata->time ??};

timezone *tz{ timezone(300, DST_USA)};

settimeofday(tv, tz);

一些评论和链接帮助我。混淆是区分timeval,time_t和timestamp_t。据我了解这里的差别,请大家指正,如果情况并非如此:

全部是1970年1月1日以后秒的时间,但是......

的timeval是(2)长值的结构, tv_sec是1970年1月1日之后的秒,tv_usec在那之后是微秒。

time_t是一个长?这也是1970年1月1日以后的秒数

timestamp_t是在1970年1月1日之后的两倍,所以小数部分可以计算微秒以获得大致相同的timeval精度。

所以所有的人之间的转换可以去这样:

timeval time;

time_t timet;

timestamp_t timestampt;

timet = time.tv_sec; //usec dropped

timet = timestampt; //usec dropped

timestampt = timet; //usec not given

timestampt = time.tv_sec;

timestampt += (time.tv_usec/1000000) //Denominator may be off by a few 0's

是这幅画更清晰的画面?

要走向相反的方向,这是什么是需要我的应用程序:

//Convert gps_data_t* member 'time' to timeval

timeval tv;

double wholeseconds, decimalseconds;

decimalseconds = modf(newdata->time, &wholeseconds);

tv.sec = static_cast(wholeseconds);

tv.usec = static_cast(decimalseconds * 1000000.0);

//Create timezone

timezone tz{ timezone(300, DST_USA)};

//Set system time

settimeofday(&tv, &tz);

2016-11-08

DrTarr

+1

首先,仅仅因为一个函数需要一个指针到结构并不意味着你必须声明变量是一个指针。你必须已经阅读过有关运算符“&”的地址。 –

+1

至于你的问题,你甚至试过[阅读'settimeofday'手册页](http://man7.org/linux/man-pages/man2/settimeofday.2.html)?它告诉你什么结构看起来像。 –

+0

是的,我不认为混淆的是settimeofday函数需要什么,它在timeval的结构上很清楚。它来自gps数据的timestamp_t结构,我不太明白。但是,我只是发现[这](http://stackoverflow.com/questions/26709107/how-to-convert-a-timestamp-t-to-a-real-time)链接这是非常有益的,我会尝试。我猜timestamp_t和time_t很相似,但是它有一个小数部分相当于秒的小数部分,这在这个应用中并不重要。这可能是缺失的一块。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值