實現檔案時間資訊的列印輸出
阿新 • • 發佈:2018-12-01
一、 基礎知識
在Linux中,沒有檔案建立時間的說法,只有修改時間(st_mtime)、狀態更改時間(st_ctime)、最後訪問時間(st_time)三種。值得注意的是,時間:
ls -l列印輸出的正是修改時間,在Linux下容易驗證,在此不加贅述。
Linux中的時間是這樣紀錄的——記下距特定時間 (1970年1月1日00:00:00)(以Unix誕生的時間為參照確定的,UNIX認為1970年1月1日0點是時間紀元) 的秒數(乃至納秒),然後經過一系列轉換變成我們看到的樣子。
二、 程式碼實現
首先,在struct stat結構(#include<sys/stat.h>)中,有一欄位為st_mtime,目前精度是秒數;其次,將st_mtime交由gmtime或localtime(#include<time.h>)函式進行處理,得到struct tm(#include<time.h>)結構內容是不一樣的——前者是本機時間,後者是統一時間,簡單來理解:我不聯網就可以把電腦的時間改成我想要的,這樣,世界一個時間,我的電腦一個時間,沒有一點問題。最後,呼叫strftime(#include<time.h>)函式對tm進行處理(類似於printf函式)。
#include<time.h> //strftime() localtime() #include<sys/stat.h> //stat() #include<assert.h> //assert() #include<stdio.h> //printf() int main() { struct stat st; assert(0 == stat("/home/zhaopulei/桌面/a.txt", &st)); //由stat()函式自動填寫變數st。 struct tm *tmp = localtime(&st.st_mtime); //由localtime()自動返回struct tm*型別。 assert(NULL != tmp); char buf[64]; assert(0 != strftime(buf, 64, "%m月 %e日 %R", tmp)); //由strftime將時間分解成字串寫入buf中。 printf("%s\n", buf); //列印輸出結果。 return 0; }
程式碼說明,在Linux桌面上新建檔案a.txt,嘗試輸出時間。
經過比對,和ls命令輸出的結果一致,證明程式碼執行正確。本電腦虛擬機器上安裝的Linux沒有聯網,時間是自己的那一套。