当前位置: 技术问答>linux和unix
linux/unix下如何检查一个目录(包括子目录)的文件变化
来源: 互联网 发布时间:2015-06-24
本文导语: 如题,我参考过 网上一些dnotify的代码,好像有两种方法,一个是直接用到linux的自己目录notify机制(有比较大的局限性),一个是利用fcntl设置信号的方法。请各位研究过的人详细讲解一下。谢谢~ | ...
如题,我参考过 网上一些dnotify的代码,好像有两种方法,一个是直接用到linux的自己目录notify机制(有比较大的局限性),一个是利用fcntl设置信号的方法。请各位研究过的人详细讲解一下。谢谢~
|
其实老外早就想到这个问题了。fam是sgi开发的一个监控文件创建、修改、删除的工具,以前用在irix上,现在已经open source了。
http://oss.sgi.com/projects/fam/
Redhat的Linux发行版中就包括它,应该还提供了一堆的api。
我以前也为了这个问题大伤脑筋,干吗不利用前人的工具啊。
http://oss.sgi.com/projects/fam/
Redhat的Linux发行版中就包括它,应该还提供了一堆的api。
我以前也为了这个问题大伤脑筋,干吗不利用前人的工具啊。
|
我想你说的两种方法其实只是一种,利用fcntl设置信号只是用来设置kernel向application发的信号类型。另外,dnotify有什么局限性?
|
用fstat()或stat()函数试试。
#include
#include
int fstat(int filefes,struct stat *buf);
#include
#include
int stat(const char *file_name,struct stat *buf);
其中struct stat中有三个字段可以用:
struct stat
{
...
time_t st_atime; //time of last access
time_t st_mtime; //time of last modification
time_t st_ctime; //time of last change
};
#include
#include
int fstat(int filefes,struct stat *buf);
#include
#include
int stat(const char *file_name,struct stat *buf);
其中struct stat中有三个字段可以用:
struct stat
{
...
time_t st_atime; //time of last access
time_t st_mtime; //time of last modification
time_t st_ctime; //time of last change
};
|
小弟每研究过,但是我有一个比较怪异的想法:就是利用makefile的依赖关系可以检测!
我想这个方法还简单,还实用!
我想这个方法还简单,还实用!