LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2312|回复: 10

请各位大侠帮个忙!(监视文件的改变)

[复制链接]
发表于 2005-6-22 21:37:11 | 显示全部楼层 |阅读模式
本人新接触linux,有如下一段代码:
         #define _GNU_SOURCE     /* needed to get the defines */
         #include <fcntl.h>      /* in glibc 2.2 this has the needed
                                            values defined */
         #include <signal.h>
         #include <stdio.h>
         #include <unistd.h>
         
         static volatile int event_fd;
         
         static void handler(int sig, siginfo_t *si, void *data)
         {
                 event_fd = si->si_fd;
        }
         
         int main(void)
         {
                 struct sigaction act;
                 int fd;
                 
                 act.sa_sigaction = handler;
                 sigemptyset(&act.sa_mask);
                 act.sa_flags = SA_SIGINFO;
                 sigaction(SIGRTMIN + 1, &act, NULL);
                 
                 fd = open(".", O_RDONLY);
                 fcntl(fd, F_SETSIG, SIGRTMIN + 1);
                 fcntl(fd, F_NOTIFY, DN_MODIFY|DN_CREATE|DN_MULTISHOT);
                 /* we will now be notified if any of the files
                    in "." is modified or new files are created */
                 while (1) {
                         pause();
                         printf("Got event on fd=%d\n", event_fd);
                 }
         }

                 不管fd = open()哪一个文件夹/文件,得到的值都为3,请问这是为什么?不胜感激!
发表于 2005-6-23 17:31:59 | 显示全部楼层
你运行2个这样的程序 最后一个程序的fd的值应该是4
open是返回文件描述符(int) 系统将0分配给输出stdout 1输入stdin 2stderr 当你第一次调用open时就选取了3
回复 支持 反对

使用道具 举报

发表于 2005-6-23 18:36:16 | 显示全部楼层
我faint。
回复 支持 反对

使用道具 举报

发表于 2005-6-23 20:14:18 | 显示全部楼层
这段程序是从那儿抄来的?
回复 支持 反对

使用道具 举报

发表于 2005-6-23 21:18:30 | 显示全部楼层
这段程序是用于监控某目录下文件的增加,删除和修改的。
不过,楼主好像对Linux编程还没入门,怎么就用到这么复杂的东东?
2楼的回复搞笑。
回复 支持 反对

使用道具 举报

发表于 2005-6-23 21:27:56 | 显示全部楼层
Post by switch
你运行2个这样的程序 最后一个程序的fd的值应该是4

??!
ps:Tetris要是不说,我还没有注意到呢。
回复 支持 反对

使用道具 举报

发表于 2005-6-23 21:29:53 | 显示全部楼层
Post by Tetris
这段程序是用于监控某目录下文件的增加,删除和修改的。

这种做法是只有linux才支持的,不可移植。
回复 支持 反对

使用道具 举报

发表于 2005-6-23 22:02:22 | 显示全部楼层
去年趋势竞赛题目里有一个就是要监控系统中任何的文件增加,删除与修改。我们在Linux下做很亏,因为Linux系统本身并不支持这个功能。最终实现的是监控32个目录。附件是整个客户端的源代码。题目的要求在http://www.trendmicro.com.cn/contest/2004/subject1.htm
回想起来都不知道自己是怎么在7天之内写出这些代码的,那时候人就像被上了发条似的,除了编程什么事都不想做。现在再也没有这种效率了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-24 09:15:11 | 显示全部楼层
谢谢各位的热心回答,这段代码好像是linux内核中的一段代码,好像是dnotify中的一个东西。
另外说明的一点,我对linux的使用还比较熟悉,c语言也编过一定的程序,只是对linux上的编程(尤其是内核方面的)刚刚接触,所以遇到一些问题请大家帮忙。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-24 09:16:42 | 显示全部楼层
各位提供的解答我正在尝试,再次感谢大家!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表