2010-08-25 78 views
3

我需要定期監視我的linux機器上的文件夾,以檢查它們是否超出了某些限制。文件夾大小linux

我檢查了stat函數調用,但在所有子文件夾和文件上遞歸地運行stat是耗時的,我需要爲所有文件夾執行此操作。

是否內核維護任何數據結構,我可以在我的程序中解釋。或者是它們的任何標準API。

回答

3

如果您需要強制執行的限制,然後使用quotas

1

你想quotactl:

quotactl -- manipulate filesystem quotas 

SYNOPSIS 
    #include <sys/types.h> /* types needed by quota.h */ 
    #include <sys/quota.h> /* for disk quotas */ 
3

如果配額機制不suitible,然後 inotify可能會派上用場:

從維基百科:

inotify是一個Linux kerne l子系統 ,用於擴展文件系統到 注意文件系統的更改, 將這些更改報告給應用程序。將這些更改報告給應用程序。

+0

我已經檢查inotify事件,文件夾的大小監測中不存在這個 – Poorna 2010-08-25 13:02:58

+2

@siri是的,我知道,但你可以連接到每一個IN_CLOSE_WRITE並執行一些行動,而不是一直在做,而不知道目錄中是否有任何改變。 – 2010-08-25 14:11:05

1

以遞歸方式調用stat是獲取當前文件夾大小的唯一方法。如果要持續監視文件系統,請查看inotify。

+0

雖然,請小心使用哪些統計字段來計算所用空間量。您可能需要將每個文件或目錄的使用情況** up **整理爲'st_blksize'的下一個倍數 – JeremyP 2010-08-25 15:27:09

0

我同意@Axel。但是,如果你真的需要做到這一點的代碼,你可以通過POPEN執行 shell命令:

FILE* pf = popen("du -ch [your folder] | grep total") 

然後通過文件句柄,並與fgets(...)

讀取命令的輸出
2

類型

du -sm directory_name 

會給你以MB爲單位的目錄總規模遞歸。

類型

man du 

與此命令的幫助。