關於沒有報告有效大小的文件的注意事項存在,因爲在Linux中,有很多「文件」,其中「文件大小」不是一個有意義的概念。
主要有兩種情況:
- 的文件不是一個普通的文件。特別是,管道,套接字和字符設備文件是數據流,數據在讀取時被消耗,而不是放在磁盤上,所以尺寸沒有多大意義。
該文件所在的文件系統不提供文件大小。這在「虛擬」文件系統中尤爲常見,文件內容在讀取時生成,並且沒有磁盤備份。
要展開,文件系統不一定會將文件內容保留在磁盤上。由於文件系統API是用於表示分層數據的便利API,並且有許多工具可用於對文件進行操作,因此將數據作爲文件層次結構進行公開是有意義的。例如,/proc/
包含有關進程(如打開的文件和已用內存)的信息,/sys/
包含驅動程序特定的信息和選項(從傳感器採樣率到LED顏色的任何內容)。使用FUSE(UserSpacE中的文件系統),您可以編寫一個文件系統來執行任何操作,從SSH到遠程計算機以將Twitter作爲文件系統公開。
對於很多這些文件系統,「文件大小」可能沒有多大意義。例如,LED驅動器可能會暴露三個文件red
,和blue
。可以讀取它們以獲取當前顏色或寫入以更改顏色。現在,真的值得爲它們實現文件大小,因爲它們只是RAM中的設置,沒有任何磁盤支持,並且不能被刪除?不是真的。
總之,文件不一定是「磁盤上的東西」。對於許多更高級的文件使用,「文件大小」要麼沒有意義,要麼不值得提供。
http://stackoverflow.com/questions/8236/how-do-you-determine-the-size-of-a-file-in-c – eddiem
Unix系統上的某些文件沒有有意義的文件大小,因爲它們不是磁盤文件。管道的大小是多少?一個插座? '/ proc /'和'/ sys /'中的任何「虛擬」文件?這就是爲什麼所有文件大小的函數都有很大的警告腳註 - 並非所有文件都具有有意義的大小。 –
@ColonelThirtyTwo謝謝,這是有道理的。 –