linux系统中防止系统时间,设置系统时间与在Linux中
設置系統時間的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很相似,但是它有一個小數部分相當于秒的小數部分,這在這個應用中并不重要。這可能是缺失的一塊。 –
總結
以上是生活随笔為你收集整理的linux系统中防止系统时间,设置系统时间与在Linux中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux命令窗口颜色,如何修改ssh命
- 下一篇: linux下git修改密码后无法使用,g