日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2024/4/14 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。