inotify监听文件

inotify监听文件并通知

static int inotify_dbfile(const char *spFromRule, const char *spDevFile)
{
    int inotifyFd;
    int watchfd1;
    int watchfd2;
    char buf[BUF_LEN];
    size_t numRead;
    char *spfile;
    struct inotify_event *event;
    int ret = 0;

    /* 初始化inotify实例 */
    if (-1 == (inotifyFd = inotify_init ()))
    {
        LOG_ERROR("Error: Inotify Initialization is failed..");
        exit(1);
    }

    /* 循环所有输入目录,设置监视 */
    if (-1 == (watchfd1 = inotify_add_watch (inotifyFd, spFromRule, event_mask)))
    {
        LOG_ERROR("Error: Inotify Watch [%s] is failed..", spFromRule);
        exit(2);
    }

    if (-1 == (watchfd2 = inotify_add_watch (inotifyFd, spDevFile, event_mask)))
    {
        LOG_ERROR("Error: Inotify Watch [%s] is failed..", spDevFile);
        exit(2);
    }

    while (1)
    {
        /* Read events forever */
        if (1 > (numRead = read(inotifyFd, buf, BUF_LEN)))
        {
            LOG_ERROR("read() from inotify fd returned 0!");
            puts("read() from inotify fd returned 0!");
            exit(4);
        }

        /* 处理read()返回的缓冲区中的所有事件 */
        for (spfile = buf; spfile < buf + numRead; )
        {
            event = (struct inotify_event *) spfile;
            if ((event->mask & IN_MODIFY))
            {
                LOG_INFO("INFO: Inotify Watch file is modified...");
                ret = 1;
                goto end;
            }

            spfile += sizeof(struct inotify_event) + event->len;
        }
    }

end:
    inotify_rm_watch(inotifyFd, watchfd1);
    inotify_rm_watch(inotifyFd, watchfd2);
    close(inotifyFd);

    return ret;
}

原文地址:https://www.cnblogs.com/porkerface/p/12031597.html

时间: 2024-09-30 23:58:06

inotify监听文件的相关文章

Android 监听文件夹

在一次Android和pc端的通讯过程中,我们放弃了adb forward来实现socket通讯.而是使用adb push文件,我监听文件夹... 都学习一下很有必要 本篇简单Android监听文件夹的方式FileObserver. FileObserver简介 Android.os包下的FileObserver类是一个用于监听文件访问.创建.修改.删除.移动等操作的监听器,基于Linux的INotify. FileObserver是个抽象类,必须继承它才能使用.每个FileObserver对象

win7 安装oracle 10g 未生成监听文件 导致配置监听时无法保存

最近这两天一直在为安装 的oracle 配置监听无法保存 再找各种解决方案,最后自己居然自己配置出来了. 因为缺少监听文件,拷贝别人的放到自己的目录下C:\oracle\product\10.2.0\client_1\NETWORK\ADMIN   listener.ora.tnsnames.ora和 sqlnet.ora 1.修改 tnsnames.ora  中的 # tnsnames.ora Network Configuration File:  c:\oracle\product\10.

Windows平台下Oracle 11g R2监听文件日志过大,造成客户端无法连接的问题处理

近期部署在生产环境的应用突然无法访问,查看应用日志发现无法获取数据库连接. SystemErr R Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection SystemErr R at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:359) SystemErr R at oracle.net.resolve

使用oracle10g官方文档找到监听文件(listener.ora)的模板

***********************************************声明***********************************************************************  原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/39780739 *******

使用Node.JS监听文件夹变化

使用Node.JS监听文件夹改变有许多应用场合,比如: 构建自动编绎工具 当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应的JS或CSS. 构建自动布署工具 通过侦听源文件夹的改变,你可以自动即时将改后的文件布署到测试服务器,加快你的开发测试速度. 这些工具其实都需要侦听文件夹的改变,基于Node.JS的侦听文件夹改变的模块有很多. fs.watch 其中Node.JS的文件系统也可侦听某个目录的改变, 如fs.wat

FileSystemWatcher监听文件是否有被修改

作用:监听文件系统更改通知,并在目录或目录中的文件更改时引发事件. 需求:监听特定文件是否修改,然后做出相应的操作. 方法: ①利用一个线程,一直去查找该指定的文件是否有被修改,如果修改则操作特定步骤,否则继续查询. 缺点:占用CPU,要一直循环查找. ②利用.net里面的FileSystemWatcher来监听文件是否有被修改,如果有,则操作特定步骤. 代码: ①定义一个全局变量Watch FileSystemWatcher Watch; ②初始化该全局变量 Watch = new FileS

如何使用NodeJs来监听文件变化

1.前言 在我们调试修改代码的时候,每修改一次代码,哪怕只是很小的修改,我们都需要手动重新build文件,然后再运行代码,看修改的效果,这样的效率特别低,对于开发者来说简直不能忍. 2.构建自动编译工具 如何使用nodeJs来监听文件变化,一旦源文件修改保存时,自动运行build过程.比如当你写CoffeeScript文件或SASS文件时,保存之后可即时生成对应的JS或CSS. 基于Node.JS的侦听文件夹改变的模块有很多. a .  fs.watch.Node.JS的文件系统也可侦听某个目录

利用Node的chokidar 监听文件改变的文件。

最近维护一个项目.每次改完东西,都要上传到服务器.然后有时候就忘记一些东西,于是就想有没有可以方法能监听文件的改变.然后我再利用程序把更改的文件一键上传到服务器. 于是就找到了nodejs 的chokidar模块. 然后利用redis的set集合.因为我们频繁更改.如果用普通的字符 会增加比较.set是一个集合,里面的元素都是不重复的.正好可以利用这个特性.帮我们记录更改的记录文件.删除的时候,然后删掉set中的文件.目前只做了增加或修改的文件提交,如果本地删除的 不会同步到服务器. 监听本地文

nodejs中监听文件更改(转)

https://www.jianshu.com/p/23b5e604268d nodejs下监听文件更改的插件 var path = require('path') var Chokidar = require('chokidar'); var watcher = Chokidar.watch([path.join(__dirname, '../src')], { // ignored: /(^|[\/\\])\../, persistent: true, usePolling: true, }