#include <unistd.h>
#include <sys/inotify.h>
#include <stdio.h>
#include <error.h>
#include <errno.h>
#include <string.h> #define ERROR(text) error(1, errno, "%s", text) typedef struct test{
int flag;
const char *name;
}EventMask; int freadsome(void *dest, size_t remain, FILE *file)
{
char *offset = (char*)dest;
while (remain) {
int n = fread(offset, , remain, file);
if (n==) {
return -;
}
remain -= n;
offset += n;
}
return ;
} int main(int argc, char *argv[])
{
const char *target;
if (argc == ) {
target = ".";
}
else {
target = argv[];
} EventMask event_masks[] = {
{IN_ACCESS , "IN_ACCESS"} ,
{IN_ATTRIB , "IN_ATTRIB"} ,
{IN_CLOSE_WRITE , "IN_CLOSE_WRITE"} ,
{IN_CLOSE_NOWRITE , "IN_CLOSE_NOWRITE"} ,
{IN_CREATE , "IN_CREATE"} ,
{IN_DELETE , "IN_DELETE"} ,
{IN_DELETE_SELF , "IN_DELETE_SELF"} ,
{IN_MODIFY , "IN_MODIFY"} ,
{IN_MOVE_SELF , "IN_MOVE_SELF"} ,
{IN_MOVED_FROM , "IN_MOVED_FROM"} ,
{IN_MOVED_TO , "IN_MOVED_TO"} ,
{IN_OPEN , "IN_OPEN"} , {IN_DONT_FOLLOW , "IN_DONT_FOLLOW"} ,
{IN_EXCL_UNLINK , "IN_EXCL_UNLINK"} ,
{IN_MASK_ADD , "IN_MASK_ADD"} ,
{IN_ONESHOT , "IN_ONESHOT"} ,
{IN_ONLYDIR , "IN_ONLYDIR"} , {IN_IGNORED , "IN_IGNORED"} ,
{IN_ISDIR , "IN_ISDIR"} ,
{IN_Q_OVERFLOW , "IN_Q_OVERFLOW"} ,
{IN_UNMOUNT , "IN_UNMOUNT"} ,
}; int monitor = inotify_init();
if ( - == monitor ) {
ERROR("monitor");
} int watcher = inotify_add_watch(monitor, target, IN_ALL_EVENTS);
if ( - == watcher ) {
ERROR("inotify_add_watch");
} FILE *monitor_file = fdopen(monitor, "r");
char last_name[];
char name[];
/* event:inotify_event -> name:char[event.len] */ while () { struct inotify_event event;
if ( - == freadsome(&event, sizeof(event), monitor_file) ) {
ERROR("freadsome");
}
if (event.len) {
freadsome(name, event.len, monitor_file);
} else {
sprintf(name, "FD: %d\n", event.wd);
} if (strcmp(name, last_name) != ) {
puts(name);
strcpy(last_name, name);
} /* 显示event的mask的含义 */
int i = ;
for (i=; i<sizeof(event_masks)/sizeof(EventMask); ++i)
{
if (event.mask & event_masks[i].flag) {
printf("\t%s\n", event_masks[i].name);
}
}
}
return ;
}

使用inotify检测linux目录内文件变化的更多相关文章

  1. Window Linux下实现指定目录内文件变更的监控方法

    转自:http://qbaok.blog.163.com/blog/static/10129265201112302014782/ 对于监控指定目录内文件变更,window 系统提供了两个未公开API ...

  2. Linux目录和文件——查询目录和文件的命令

    Linux目录和文件——查询目录和文件的命令 摘要:本文主要学习了在Linux系统中是如何查询目录和文件的. which命令 which命令是根据PATH环境变量设置的路径,去搜索执行文件. 基本语法 ...

  3. Linux目录和文件——管理目录和文件的命令

    Linux目录和文件——管理目录和文件的命令 摘要:本文主要学习了Linux系统中关于目录和文件的操作. cd命令 cd命令用来切换工作目录,是Change Directory的缩写. 基本语法 cd ...

  4. linux 目录下文件批量植入和删除,按日期打包

    linux目录下文件批量植入 [root@greymouster http2]# find /usr/local/http2/htdocs/ -type f|xargs sed -i "   ...

  5. 在两个Android设备间通过UDP传输目录内文件

    这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...

  6. C#监控指定目录的文件变化的代码

    如下的资料是关于C#监控指定目录的文件变化的代码. FileSystemWatcher watcher = new FileSystemWatcher();watcher.Path = @" ...

  7. Linux目录和文件——目录格式

    Linux目录和文件——目录格式 摘要:本文主要了解了Linux系统的目录格式. 一切皆文件 Linux下“一切皆文件”是Unix/Linux的基本哲学之一. Linux中所有内容都是以文件的形式保存 ...

  8. Linux 目录与文件的基本操作

    1 目录与文件 1.1 文件 硬盘中的数据在操作系统中的体现为文件. 1.2 目录 目录的概念不是文件集合.目录和文件一样,目录也是文件.目录是找到文件的“踏板”.目录的本质是路径映射. 1.3 Li ...

  9. Linux 目录和文件的操作

    整理常用的linux命令,关于目录和文件的操作,用于巩固记忆,以备不时之需. [root@localhost ~] root:当前用户 localhost:主机名 ~:当前所在位置 符号#:管理员 符 ...

随机推荐

  1. java字符串分解 StringTokenizer用法(比split()方法效率高)

    Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串.如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你. int countTokens ...

  2. Feister network

    在密码学中,Feister network(又叫Feister Function, 一下简称 F函数)是一种用在块加密上的对称结构,很多种块加密算法都是使用这种结构. 优点: 1.加解密的过程非常相似 ...

  3. C# 之 user32函数库

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  4. java.util Pattern 和 Mathcer

    1.测试给定的正则表达式是否匹配输入的字符串,这里该正则表达式只使用一次 private String regex ; private String input; @Before public voi ...

  5. java适配器模式随笔记

    今天学习了一下java中的适配器模式,在这里做个记录,方便以后查看 什么是适配器,适配就是连接源到目标的中间件,简单的例子就是我们的港水货手机充电器是大三角,我们想要在大陆正常使用我们需要一个转接充电 ...

  6. [WinForm] VS2010发布、打包安装程序(超全超详细)

    1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...

  7. Oracle 经典语法(四)

    1. 各个部门平均.最大.最小工资.人数,按照部门号升序排列.SELECT deptno AS 部门号,AVG(sal) AS 平均工资 ,MAX(sal) AS 最高工资,MIN(sal)  AS ...

  8. TaskUtil多线程与定时任务

    package com.taoban.util; /**  * 执行单次任务或定时任务工具类(用于减少new Thread()和new Timer()的使用)  */ public class Tas ...

  9. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

  10. Jira安装部署

    一.先安装JDK JDK1.6下载:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32- ...