每個檔案是有三個時間的,分別是st_atime,st_mtime和st_ctime。
st_atime: 最後一次訪問時間,如果使用read函式讀某個檔案,會改變檔案的這個時間
st_mtime:最後一次修改時間,如果使用write函式寫某個檔案,會改變檔案的這個時間
st_ctime:最後一次修改檔案許可權時間,如果使用chmod修改了檔案的許可權,會改變這個時間
怎樣獲取這三個時間呢?
使用stat族函式,man 2 stat可以檢視這一族函式,有stat,fstat,lstat
[plain]view plain
copy
int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *path, struct stat *buf);
從函式原型可知,stat函式第乙個引數需要乙個位址,第二個引數需要乙個結構體指標,
下面我們寫個程式來獲取當前檔案的mtime, 同時獲取當前的系統時間.
int main(void)fstat(fd, &stbuf);
localtime_r(&stbuf.st_mtime, &filetime);//使用localtime_r函式將檔案的mtime存放到filetime中
time(&now); //獲取當前系統時間
localtime_r(&now, &nowtime); //將系統時間存放到nowtime中
printf("file tm_min is [%d] tm_sec is [%d]\n", filetime.tm_min, filetime.tm_sec, filetime);
printf("now tm_min is [%d] tm_sec is [%d]\n", nowtime.tm_min, nowtime.tm_sec, nowtime);
return 0;
}
其中的localtime_r是將time_t的時間轉化為tm結構體的時間,更方便我們閱讀,且儲存在我們要求的位址中
還有另乙個函式localtime,功能是一樣的,但是它只有乙個引數,它會自動分配乙個空間存放轉化為tm結構體的時間
這樣就會遇到乙個問題,如果要使用兩次或以上localtime,只能儲存最後乙個呼叫函式時轉化的時間!
另外stat可以獲取大量有關檔案的資訊,可以自行查閱manpage
系統時間與硬體時間
系統時間 system time 一般說來就是我們執行 date命令看到的時間,linux系統下所有的時間呼叫 除了直接訪問硬體時間的命令 都是使用的這個時間。硬體時間 hardware time 主機板上bios中的時間,由主機板電池供電來維持執行,系統開機時要讀取這個時間,並根據它來設定系統時間...
Linux系統時間與硬體時間及時間同步
root web176 date fri nov 6 14 21 29 cst 2020 root web176 date s 10 10 10 fri nov 6 10 10 10 cst 2020 root web176 date fri nov 6 10 10 14 cst 2020設定系統時...
Linux系統時間與硬體時間及時間同步
linux系統有系統時間和硬體時間之分 系統時間 一般說來就是我們執行 date命令看到的時間,linux系統下所有的時間呼叫 除了直接訪問硬體時間的命令 都是使用的這個時間。硬體時間 主機板上bios中的時間,由主機板電池供電來維持執行,系統開機時要讀取這個時間,並根據它來設定系統時間 注意 系統...