我需要定期监视我的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