`
jimmygan
  • 浏览: 82403 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

ruby监控目录变化

阅读更多
ruby监控目录变化

安转gem插件
#gem install ffi


监控代码
require 'rubygems'
require 'ffi'
module Inotify
  extend FFI::Library
  ffi_lib FFI::Library::LIBC
  class Event < FFI::Struct
    layout \
      :wd, :int,
      :mask, :uint,
      :cookie, :uint,
      :len, :uint
  end
  attach_function :init, :inotify_init, [ ], :int
  attach_function :add_watch, :inotify_add_watch, [ :int, :string, :uint ], :int
  attach_function :rm_watch, :inotify_rm_watch, [ :int, :uint ], :int
  attach_function :read, [ :int, :buffer_out, :uint ], :int
  IN_ACCESS=0x00000001
  IN_MODIFY=0x00000002
  IN_ATTRIB=0x00000004
  IN_CLOSE_WRITE=0x00000008
  IN_CLOSE_NOWRITE=0x00000010
  IN_CLOSE=(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
  IN_OPEN=0x00000020
  IN_MOVED_FROM=0x00000040
  IN_MOVED_TO=0x00000080
  IN_MOVE= (IN_MOVED_FROM | IN_MOVED_TO)
  IN_CREATE=0x00000100
  IN_DELETE=0x00000200
  IN_DELETE_SELF=0x00000400
  IN_MOVE_SELF=0x00000800
  # Events sent by the kernel.
  IN_UNMOUNT=0x00002000
  IN_Q_OVERFLOW=0x00004000
  IN_IGNORED=0x00008000
  IN_ONLYDIR=0x01000000
  IN_DONT_FOLLOW=0x02000000
  IN_MASK_ADD=0x20000000
  IN_ISDIR=0x40000000
  IN_ONESHOT=0x80000000
  IN_ALL_EVENTS=(IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE \
      | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM \
      | IN_MOVED_TO | IN_CREATE | IN_DELETE \
      | IN_DELETE_SELF | IN_MOVE_SELF)

end
if $0 == __FILE__   #$0是用于启动程序的文件名
  fd = Inotify.init
  puts "fd=#{fd}"
  wd = Inotify.add_watch(fd, "/home/jimmygan/bnet/", Inotify::IN_ALL_EVENTS)
  fp = FFI::IO.for_fd(fd)
  puts "wfp=#{fp}"
  while true
    buf = FFI::Buffer.alloc_out(Inotify::Event.size + 4096, 1, false)
    ev = Inotify::Event.new buf
    ready = IO.select([ fp ], nil, nil, nil)
    n = Inotify.read(fd, buf, buf.total)
    puts "Read #{n} bytes from inotify fd"
    puts "event.wd=#{ev[:wd]} mask=#{ev[:mask]} len=#{ev[:len]} name=#{ev[:len] > 0 ? buf.get_string(16) : 'unknown'}"
  end
end
分享到:
评论

相关推荐

    cutting_edge:自托管的依赖项监控,包括闪亮的徽章! 目前支持 Ruby、Rust 和 Python 项目

    可以在项目依赖项的状态发生变化时向您发送电子邮件 提供一个简单的详细说明每个项目的状态 支持以下语言: Ruby Python 锈 支持以下平台: GitHub Gitlab(gitlab.com 和) Gitea() 公共和 查看的 Web ...

    监控文件修改和提醒Listen-Guard.zip

    Listen 用于监听文件修改,并通知你有关的变化。具有以下特性:在 MRI 上的 OS 优化适配器,支持Mac OS X 10.6 , Linux...VFAT 卷上提高了变化检测精度通过 Travis CI 在选定的 Ruby 环境进行测试 标签:Listen

    klaxon:Klaxon 使记者和编辑能够监控网络上的大量网站,以了解具有新闻价值的变化

    您列出要监控的网站,Klaxon 将访问它们,如果它们发生变化,会通过电子邮件向您发送不同的内容。 它使您不必每天自己重新加载数十个链接。 它非常适合监控您可能会错过的网站更改,例如信息披露自由日志、法庭...

    unread_issues:Redmine 未读问题

    该插件实现了监控问题变化的便捷功能。 在问题列表中会出现彩色指示器,显示问题的当前状态。 如果问题是新问题而您尚未查看,则问题标题前会亮起一个绿色圆圈。 如果自您上次查看以来该问题有任何更改,则在该问题...

    基于ROR的智能社区研究 (2009年)

    随着社会发展,人们的生活方式发生了巨大的变化.每日奔波于公司和寓所之间的人们,生活质量得不到保证.结合Web技术和监控技术的智能社区逐渐成为研究的热点.本文利用Ruby语言的动态特性和Rails全栈式的框架结构,...

    web-monitoring-db:HTTP API,用于跟踪和注释一组网页的更改

    ) 提供一个API来获取该页面和版本数据,并允许分析人员或其他自动化工具使用有关元数据在各个版本之间发生变化的元数据来注释这些版本。 有关此项目中数据建模方式的更多信息,请参见下面的 。 可从应用程序的主页...

    solr 企业搜索引擎教程

     可监控的日志  支持高速增量式更新(Fast incremental Updates)和快照发布(Snapshot Distribution) 1.2.2 Schema(模式)  定义域类型和文档的域  能够驱动智能处理  声明式的 Lucene 分析器规范  动态域...

    monit:monit 厨师食谱

    概述监控和管理工具的厨师食谱。提交更改确保您的代码遵循现有约定将您的 PR 压缩为一次提交如果需要,重新定位到 master 添加 Chefspec 测试确保美食评论家很高兴确保你的 PR 被标记为“可以安全合并”变更日志如何...

    精通Qt4编程(第二版)源代码

    另外,还有一些开源的在其他语言上的Qt绑定,如C#/Mono的绑定Qyoto,Python的绑定PyQt,Ruby的绑定QtRuby等。有了这些产品,编写Qt程序不再是C++程序员的专利了。 \Qt的发行版本有商业版和开源版。开源版遵循QPL(Q...

    精通qt4编程(源代码)

    \ 第8章 文件处理 蔡志明介绍了Qt的文件处理,包括基于流的文本文件和二进制文件处理,文件信息和目录操作,目录以及文件的变化监控,文件引擎的编写。 219 \ 第9章 网络 李立夏介绍了Qt的网络处理,包括编写常见的...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

Global site tag (gtag.js) - Google Analytics