2011-02-23 96 views
11

我想寫一個C程序來顯示文件上次修改時間(以微秒或毫秒爲單位)。我怎麼辦?你能幫我一下嗎?如何在linux上顯示文件上次修改時間

非常感謝。

+1

只是出於好奇,你爲什麼需要這個? – Alphaneo

+0

@Alphaneo:實際上,我想在某個目錄中顯示所有文件的最後修改時間。據此,我可以整理我的文件。 thx – JavaMobile

回答

11

stat()功能。在充分的最新版本的glibc,st_mtim(注:無拖尾e)是保存文件的修改時間struct timespec類型的字段:

struct stat st; 

if (stat(filename, &st)) { 
    perror(filename); 
} else { 
    printf("%s: mtime = %lld.%.9ld\n", filename, (long long)st.st_mtim.tv_sec, st.st_mtim.tv_nsec); 
} 

您應該檢查的st_mtim在構建系統struct stat存在,並且如果它不存在,準備回退到st_mtime(其類型爲time_t,並且只有1秒的分辨率)。

+0

非常感謝。這真是棒極了。但是輸出是無序的,是否可以根據文件名進行排序呢? – JavaMobile

+0

@JavaMobile:當然 - 將指向文件名的指針放入一個數組中並對它們進行排序,然後遍歷該數組並調用'stat()'。 – caf

4

您可以使用stat()函數,它會返回包含文件上次修改時間的struct stat。這是手冊頁http://linux.die.net/man/2/stat。至於精確度,取決於您的文件系統是否支持亞秒時間戳。

+0

是否有可能在毫秒或微秒範圍內使用stat來獲取時間......恐怕不是;) – Alphaneo

+2

@Alphaneo:我查看了該網頁,它說'stat'以納秒精度返回時間。 –

+0

是的,Linux上的stat()有額外的字段可以添加納秒分辨率,因爲內核爲2.5.48。然而,正如@ZelluX指出的那樣,準確度!=精度 - 它實際上取決於文件系統支持的內容。 – payne

0

要完成答案,通過AndrewZelluX
限制在文件系統中。對於Linux ext3是常用的,你可以在維基百科看到:用來

Date resolution 1s 
1

JFS,XFS,ext4和Btrfs支持納秒時間戳。

圖書「的Linux編程接口」,由邁克爾·凱里斯克對文件提供一個很好的部分屬性

相關問題