簡體   English   中英

將time_t變量寫入文件

[英]Write a time_t variable to file

我正在這樣的文件中寫入一個time_t變量(並且也以相同的方式讀取它,但是,而不是寫入,現在我使用讀取):

//寫時間

         file fd;
         time_t currentTime;
         currentTime = time(0); // current time
         fd.create(filepath);  
         fd.open(filepath);  
         fd.seek(SEEK_SET,0);  
         fd.write(&currentTime,sizeof(time_t));  
         fd.close();

//讀取時間

     file fd;
     time_t timeFromFile;
     fd.open(filepath);  
     fd.seek(SEEK_SET,0);  
     fd.read(&timeFromFile,sizeof(time_t));  

以上方法有什么問題嗎? (此外,正如我檢查的那樣,它還在工作)。

ps。 我正在為嵌入式設備編寫程序,因此我不認為可移植性等問題。 我認為這將主要在類似類型的設備上運行。

在C ++中,不能保證time_t是整數類型。

盡管未定義,但幾乎始終是一個整數值,該整數值保持自UTC 1970年1月1日00:00以來的秒數,對應於POSIX時間。

但是,如果您始終在同一平台和編譯器上進行讀寫,那應該沒問題。 值得注意的是,盡管大多數系統將時間表示為一個整體,但有些系統可能具有不同的大小。 最初, time_t通常由32位數字表示。 但是,這會產生2038問題 time_t ,通常會看到time_t用64位數字表示。

2038年問題可能會導致某些計算機軟件在2038年附近的某個時刻發生故障。該問題影響所有將系統時間存儲為帶符號的32位整數,並將此數字解釋為自00以來的秒數的所有軟件和系統。 1970年1月1日(星期四)00:00 UTC。

如果要針對使用不同頭文件(尤其是ctime )的不同設備進行編譯,則應注意time_t大小可能有所不同。 如果將time_t寫入可以從程序的另一個內部版本讀取的文件,則設備之間的數字大小可能會有所不同。

預防問題的最佳方法是在編譯時。 如果您能夠使用C ++ 11編譯器,則可以使用static_assert

static_assert( sizeof(time_t) == 8, "Unexpected time_t size" );

如果您要針對的目標使用不同的大小,則您的代碼將無法編譯,並且可以防止無法解釋的錯誤。 如果您認為這是一個可能的問題,則應該以其他方式序列化時間。

根據POSIX

time_tclock_t應為整數或實數浮點類型。

因此,將它們寫入這樣的文件是完全合理的,只要您不需要在其他設備上讀取它們即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM