浏览 2837 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-17
最后修改:2008-11-18
最近我需要一监控文件系统的, 主要用处就是, 我一保存文件, 就调用一个程序. 通过Google 了好长一段时间. 知道linux 上有个 inotify 的东西. free bsd(mac os) 上有个 kqueue 的东西, windows没看(除了玩儿,我不怎么用它). sf上 inotify-tools 的项目, 包装了inotify. 用起来不错. free bsd(mac os) 就没这么幸运了, 只能自己写. 下面的程序基本可以实现, 但问题是只能监控当前目录, 不能监控子目录. 伟大的C, 我跟他很是不熟. 希望大家帮帮忙, 指导下如何实现监控子目录,子目录的子目录。 UPDATE:我的想法是遍历所有子目录,在每个目录上同样的操作。 ... #include <sys/event.h> #include <sys/time.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> int main(void){ int f, kq, nev; struct kevent change; struct kevent event; kq = kqueue(); if (kq == -1) perror("kqueue"); f = open("/Users/abc/test", O_RDONLY); if (f == -1) perror("open"); EV_SET(&change, f, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_ONESHOT, NOTE_DELETE | NOTE_EXTEND | NOTE_WRITE | NOTE_ATTRIB, 0, 0); for (;;) { nev = kevent(kq, &change, 1, &event, 1, NULL); if (nev == -1) perror("kevent"); else if (nev > 0) { if (event.fflags & NOTE_DELETE) { printf("File deleted\n"); break; } if (event.fflags & NOTE_EXTEND || event.fflags & NOTE_WRITE){ printf("File modified\n"); system("build.sh"); } if (event.fflags & NOTE_ATTRIB){ printf("File attributes modified\n"); //system(script); } } } close(kq); close(f); return EXIT_SUCCESS; } -- I'm a dog chasing cars. It's Neal Mi. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |