生活随笔
收集整理的這篇文章主要介紹了
文件时间与系统时间
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
每個文件是有三個時間的,分別是st_atime,st_mtime和st_ctime。
st_atime: 最后一次訪問時間,如果使用read函數讀某個文件,會改變文件的這個時間
st_mtime:最后一次修改時間,如果使用write函數寫某個文件,會改變文件的這個時間
st_ctime:最后一次修改文件權限時間,如果使用chmod修改了文件的權限,會改變這個時間
怎樣獲取這三個時間呢?
使用stat族函數,man 2 stat可以查看這一族函數,有stat,fstat,lstat
[plain]?view plaincopy
???????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,?同時獲取當前的系統時間.?? <pre?name="code"?class="plain">int?main(void)?? {?? ????struct?stat?stbuf;??????????????????//這個結構體可以man?2?stat的手冊中看到,有詳細成員列表?? ????struct?tm?filetime;?????????????????//這個是存放時間的結構體,用來存放文件的時間,man?localtime可以?? ????????????????????????????????????????//看到該結構體里的詳細內容?? ????struct?tm?nowtime;??????????????????//存放當前系統時間?? ????time_t?now;?????????????????????????//time_t其實是長整型,用來存放時間?? ????int?fd;?????????????????????????????//文件描述符?? ????//stat("./test",?&stbuf);???????????//可以使用這種方式將文件信息存放到stbuf中?? ?? ????fd?=?open("./test",?O_RDONLY);??????//也可以用這種間接的方式?? ????if(fd?<?0)?? ????{????? ????????perror("open");?? ????????return?-1;??? ????}????? ?? ????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;?? }?? </pre><br>?? 其中的localtime_r是將time_t的時間轉化為tm結構體的時間,更方便我們閱讀,且存儲在我們要求的地址中<br>?? 還有另一個函數localtime,功能是一樣的,但是它只有一個參數,它會自動分配一個空間存放轉化為tm結構體的時間<br>?? 這樣就會遇到一個問題,如果要使用兩次或以上localtime,只能保存最后一個調用函數時轉化的時間!<br>?? <br>?? 另外stat可以獲取大量有關文件的信息,可以自行查閱manpage<br>?? ?<br>?? <p></p>?? <pre></pre>?? <br>?? <br>?? <p></p> ?
總結
以上是生活随笔為你收集整理的文件时间与系统时间的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。