我需要定期監視我的linux機器上的文件夾,以檢查它們是否超出了某些限制。文件夾大小linux
我檢查了stat函數調用,但在所有子文件夾和文件上遞歸地運行stat是耗時的,我需要爲所有文件夾執行此操作。
是否內核維護任何數據結構,我可以在我的程序中解釋。或者是它們的任何標準API。
我需要定期監視我的linux機器上的文件夾,以檢查它們是否超出了某些限制。文件夾大小linux
我檢查了stat函數調用,但在所有子文件夾和文件上遞歸地運行stat是耗時的,我需要爲所有文件夾執行此操作。
是否內核維護任何數據結構,我可以在我的程序中解釋。或者是它們的任何標準API。
如果您需要強制執行的限制,然後使用quotas
你想quotactl:
quotactl -- manipulate filesystem quotas
SYNOPSIS
#include <sys/types.h> /* types needed by quota.h */
#include <sys/quota.h> /* for disk quotas */
如果配額機制不suitible,然後 inotify可能會派上用場:
從維基百科:
inotify是一個Linux kerne l子系統 ,用於擴展文件系統到 注意文件系統的更改, 將這些更改報告給應用程序。將這些更改報告給應用程序。
以遞歸方式調用stat是獲取當前文件夾大小的唯一方法。如果要持續監視文件系統,請查看inotify。
雖然,請小心使用哪些統計字段來計算所用空間量。您可能需要將每個文件或目錄的使用情況** up **整理爲'st_blksize'的下一個倍數 – JeremyP 2010-08-25 15:27:09
我同意@Axel。但是,如果你真的需要做到這一點的代碼,你可以通過POPEN執行杜 shell命令:
FILE* pf = popen("du -ch [your folder] | grep total")
然後通過文件句柄,並與fgets(...)
讀取命令的輸出類型
du -sm directory_name
會給你以MB爲單位的目錄總規模遞歸。
類型
man du
與此命令的幫助。
使用命令杜,檢查此鏈接... "How To Check Folder Size"
我已經檢查inotify事件,文件夾的大小監測中不存在這個 – Poorna 2010-08-25 13:02:58
@siri是的,我知道,但你可以連接到每一個IN_CLOSE_WRITE並執行一些行動,而不是一直在做,而不知道目錄中是否有任何改變。 – 2010-08-25 14:11:05