linux/unix下如何检查一个目录(包括子目录)的文件变化

cloudysunny 2004-05-05 10:02:02
如题,我参考过 网上一些dnotify的代码,好像有两种方法,一个是直接用到linux的自己目录notify机制(有比较大的局限性),一个是利用fcntl设置信号的方法。请各位研究过的人详细讲解一下。谢谢~
...全文
552 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudysunny 2004-05-08
  • 打赏
  • 举报
回复
我是想用的,只是找不到而已,所以才来这里找罗,谢谢各位同志。
bluebeach 2004-05-08
  • 打赏
  • 举报
回复
其实老外早就想到这个问题了。fam是sgi开发的一个监控文件创建、修改、删除的工具,以前用在irix上,现在已经open source了。
http://oss.sgi.com/projects/fam/
Redhat的Linux发行版中就包括它,应该还提供了一堆的api。
我以前也为了这个问题大伤脑筋,干吗不利用前人的工具啊。
gettext 2004-05-08
  • 打赏
  • 举报
回复
很不幸,dnotify是linux特有的,没法用在unix上。 fcntl()里面很多命令都不是标准的。如果要考虑到跨平台通用,我想你说的这个功能可能只能你自己在application做,而在在application实现可能也只有轮询的方法可行,因为不可能让其他应用程序操作文件的时候给你发信号。
gettext 2004-05-07
  • 打赏
  • 举报
回复
我想你说的两种方法其实只是一种,利用fcntl设置信号只是用来设置kernel向application发的信号类型。另外,dnotify有什么局限性?
liken218 2004-05-07
  • 打赏
  • 举报
回复
帮你顶
cloudysunny 2004-05-07
  • 打赏
  • 举报
回复
to gettext:
我在网上看到的两种dnotify源代码,好像是不同的(不过我也没有研究太深,因为我对unix、linux下的函数库不太熟悉,所以看那些代码也不太清楚)。
我指的局限性是对于那种针对linux的方法,因为它用到了linux提供的一些特殊函数,而我是想实现一个unix/linux通用的函数,所以觉得它有局限性。
至于发信号量的那种方法,我在网上查了一下fcntl的函数说明,好像有两个版本,是否旧的unix系统会不支持呢?(但应该linux和unix都支持吧)如果你研究过的话请详细讲解一下这个机制和具体实现,谢谢~
或者有其他更好的实现能解决我的问题的也可以拿出来研究研究。
cloudysunny 2004-05-06
  • 打赏
  • 举报
回复
我可能表达上让你们误解了,我想的程序需要实时监控某个目录下是否有文件被创建。但又不想用轮询的方法来检查目录(感觉比较不爽)。所以想找些系统API函数通过类似notify的方式通知我的程序,这样程序就能比较高效。我知道WINDOW提供的API有:
FindFirstChangeNotify--创建一个可以执行wait function的句柄
FindNextChangeNoticy--检查下一个变换。
这样可以采用waitforsingleobject的方法让程序等待系统的唤醒。
但我不太清楚UNIX下有没有相类似的函数。故提出此问题。希望各位有研究过、没研究过的大虾都来发表一下^o^。谢谢!
wxywh 2004-05-06
  • 打赏
  • 举报
回复
用fstat()或stat()函数试试。
#include <sys/stat.h>
#include <unistd.h>
int fstat(int filefes,struct stat *buf);

#include <sys/stat.h>
#include <unistd.h>
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
};
anonimousboy 2004-05-06
  • 打赏
  • 举报
回复
小弟每研究过,但是我有一个比较怪异的想法:就是利用makefile的依赖关系可以检测!
我想这个方法还简单,还实用!
cloudysunny 2004-05-06
  • 打赏
  • 举报
回复
小顶一下没问题吧:)

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧