Linux/Unix 使用inotify,hook函数来监控文件事件

在Linux系统中,可以利用Inotify API监控文件事件,以协助在多线程环境下进行bug分析。然而,面对文件操作中的race-condition等问题,单纯依赖Inotify可能不足,这时可以通过HOOK技术来进一步定位问题。此外,使用backtrace打印调用栈有助于排查潜在的代码问题。
摘要由CSDN通过智能技术生成

在实际开发中有时候会遇到许多文件的操作,或者需要对文件事件进行排查。当代码复杂度高到一定程度或者本身项目是使用多线程的时候(磁盘文件IO使用多线程本身并不是一种好的方案)。需要检测文件的事件来进行一些bug分析,这就需要用到文件IO事件的操作。

一,使用系统API Inotify来监控文件事件

在Linux系统中可以使用inotify系列函数来进行文件事件的监控。

可以使用inotify函数来完成这项工作

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/inotify.h>

#define EVENT_SIZE      (sizeof (struct inotify_event))
#define BUF_LEN         (10 * (EVENT_SIZE + 256))

static const char * filetype[] = {"directory", "file"};

static void
displayInotifyEvent(struct inotify_event * event)
{
    const char * type = (event->mask & IN_ISDIR) ? filetype[0] : filetype[1];
    if(event->len) {
        if(event->mask & IN_CREATE) {
            printf("The %s %s was created.\n", type, event->name);
        }
        else
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值