2010-08-25 106 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 

与此命令的帮助。