用inotify监视文件/目录变化

这篇博客介绍了如何利用inotify在Linux系统中监视文件和目录的变化,以实现实时响应应用程序安装/卸载。文章针对旧版glibc缺少inotify头文件的问题提供了解决方案,并讨论了处理inotify_event结构的细节,以及与g_main_loop的结合使用。作者还提醒注意文件内容更新未完成可能导致的问题。
摘要由CSDN通过智能技术生成
               

inotify监视文件/目录变化

 

转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

作者联系方式:李先静 <xianjimli at hotmail dot com>

更新时间:2007-6-18

 

介绍inotify使用方法的文章已经有很多了,写得也非常清楚,本来不需要我多此一举了。不过,我是第一次使用,而且用得不是很顺,作为新手,想法毕竟有些不同,所以有些东西还是值得记录下来的。

 

最近为桌面增加监控applictions目录变化的功能,我们的桌面虽然是自己开发的,但遵循了freedesktop的Desktop Entry Specification标准。应用程序的desktop文件放置在applictions目录下,这是应用程序的入口,桌面负责把它们放在适当的位置(如开始菜单和状态栏中)。对于内置的应用程序,它们的desktop文件不会变化,但是第三方的应用程序可能随时安装/卸载,如果安装/卸载要强迫用户重起机器,那太不人性化了。为了支持动态安装和卸载,我们通过监控applictions中desktop文件的变化来实现。

 

1.       glibc版本偏旧,没有提供inotify的头文件。

较旧的glibc(如2.4之前的)没有提供inotify的头文件,不能直接使用网上介绍的方法,要自己定义系统调用和那些常量,如:

       
           

#include <sys/syscall.h>

           

#ifndef __NR_inotify_init

           

#if defined(__i386__)

           

# define __NR_inotify_init  291

           

# define __NR_inotify_add_watch 292

           

# define __NR_inotify_rm_watch  293

           

#elif defined(__x86_64__)

           

...

           

 

           

{

           

    return syscall(__NR_inotify_init);

           

}

           

 

           

static inline int inotify_add_watch(int fd, const char *name, uint32_t mask)

           

{

           

    return syscall(__NR_inotify_add_watch, fd, name, mask);

           

}

           

 

           

static inline int inotify_rm_watch(int fd, uint32_t wd)

           

{

           

    return syscall(__NR_inotify_rm_watch, fd, wd);

           

}

           

 

           

struct inotify_event {

           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值