inotify_init使用

2023-10-30

用于监控文件/目录的修改创建删除等操作,也可以配合epoll使用。

#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <sys/inotify.h>
#include <string.h>
// #include <unistd.h>
#include "head.h"
#include <iostream>
using namespace std;

#define LOG_TAG "inotify_thread"
#define WATCH_PATH "/home/mi/GitLab/coding/MyProject/test.txt"
void * inotify_thread(void *) {
	int fd = -1;
	int wd = -1;
	char buf[1024] = {0};
		
	fd = inotify_init();
	if (fd < 0) {
		close(fd);
		printf("inotify_init failed!\n");
		return NULL;
	}
	wd =  inotify_add_watch(fd, WATCH_PATH, IN_MODIFY | IN_CREATE | IN_DELETE); 
	if (wd < 0) {
		close(wd);
		printf("inotify_add_watch failed!\n");
		return NULL;
	}
	static_num++;
	cout << "inotify thread static_num = " << static_num << endl;
	while (1) {
		int result = -1;
		struct inotify_event *event = NULL;
		struct inotify_event *pos_ev = NULL;
		int event_mask = 0;
		memset(buf, 0, sizeof(buf));
		printf("inotify thread reading ...\n");
		result = read(fd, buf, sizeof(buf) -1);
		if (result < (int)sizeof(struct inotify_event)) {
            printf("could not read event: %s\n",strerror(result));
            return NULL;
        }
		pos_ev = (struct inotify_event *) buf;
		while (result >= (int)sizeof(struct inotify_event)) {
			event = pos_ev;
			event_mask |= event->mask;
			printf("%s: read length = %d.\n", LOG_TAG, result);
			result -= sizeof(*event);
			pos_ev++;
		}

		switch(event_mask) {
		case IN_MODIFY:
			printf("%s: modify operation!\n", LOG_TAG);
			break;
		case IN_CREATE:
			printf("%s: create operation!\n", LOG_TAG);
			break;
		case IN_DELETE:
			printf("%s: delete operation!\n", LOG_TAG);
			break;
		default:
			printf("%s: default operation!\n", LOG_TAG);
	}
	}
	inotify_rm_watch(fd, wd);
	close(fd);
	return NULL;
}


操作文件:
在这里插入图片描述
实际输出信息:
在这里插入图片描述
可以看到删掉之后再创建和操作就不行了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

inotify_init使用 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp

随机推荐

  • django框架链接mysql数据库,简单建立表格

    1 找到项目中settings py文件中DATABASES 字典 对内容进行修改 2 通过django建立表格 lt 1 gt 找到app项目中models py lt 2 gt 创建类 写入所需要的列 一个属性对应表中一列 3 表格类写
  • docker笔记-随笔

    构建dockerfile docker build t sul gateway v1 0 将本地主机文件copy到容器中 docker cp 文件 容器id 容器目录 docker cp sul gateway jar ce3a895f9a
  • 正常关闭电源失效,强行关闭虚拟机电源

    三种方法 可以任选一种执行操作 1 后台开启Troubleshooting options 使用Alt F1登录 或者使用SSH工具登录 查看进程 ps grep vmx more 如果知道虚拟机名可以直接grep vmname 杀死进程
  • Android中获取文件路径的方法总结及对照

    最近在写文件存贮 Android中获取文件路径的方法比较多 所以自己也很混乱 找了好几篇博客 发现了以下的路径归纳 记录一下 以备不时之需 Environment getDataDirectory data Environment getD
  • EasyX的下载与使用教程网址

    一 下载 下载网址 EasyX Graphics Library for C 1 点击右侧红色方框里的下载EasyX 2 下载成功后 进行点击 会出现以下界面 在点击下一步 点击安装就成功了 二 使用教程 EasyX 文档 使用教程 该网址
  • oneforall安装使用

    如遇到 安装出错 0x80070643 https www cnblogs com emanlee p 11422646 html 此软件需要python3环境 安python时 需要配置环境变量 此步在安装时即可勾选 在安装后 直接运行o
  • orbslam2段错误 (核心已转储)

    删除掉ORBSLAM的cmakelists中的 march native 以及 g2o 的cmakelists中的 march native 重新执行ORBSLAM目录下的 build sh 后就可以正常跑了
  • 第四届蓝桥杯(2013)-省赛题解_C/C++__大学A组

    目录 感悟总结 一 高斯日记 填空题 二 排它平方数 填空题 三 振兴中华 填空题 四 颠倒的价牌 填空题 五 前缀判断 代码补充 六 逆波兰表达式 代码补充 七 错误票据 八 买不到的数目 九 剪格子 十 大臣的旅费 感悟总结 蓝桥杯有大
  • cpu.h-栈的宏定义-满减栈

    常常两两相对的东西 整一起后有点记不住 就写下来 cpu h中有宏定义使用哪种栈 define OS STK GROWTH 1 Stack grows from HIGH to LOW memory on ARM 栈的四种 满栈 满 字表示
  • 错误解决:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255]

    今天又是快乐改错误的经历 在做k means进行图片压缩的实战项目中 我遇到了这样一个pyplot显示图像报错问题 Clipping input data to the valid range for imshow with RGB dat
  • Python中的字典用法

    文章目录 一 字典的定义 二 字典的创建 2 1 一个简单的字典 2 2 字典的嵌套 三 字典的特性 3 1 字典不支持切片 3 2 成员操作符 3 3 for循环遍历 四 字典元素的增加 五 字典元素的删除 六 字典元素的查看 七 字典的
  • 制作最简单的Git Server

    网上看到的Git Server部署方法一大堆 一会儿搞什么SSH 还要弄私钥公钥 复杂无比 其实有一个办法非常简单 如果是在公司内网环境下 需要将某台机器部署为Git Server 我们称该机器为服务器 假设IP为192 168 0 111
  • uni-app前端用户登录实现

    从0开始开发SpringBoot vue前后端分离项目 后端 Springboot简单实现用户登录操作 文章目录 从0开始开发SpringBoot vue前后端分离项目 后端 1 HBuildX uni app创建项目 一 项目目录结构 二
  • LinearLayer

    线性层的作用 类似于这边荧光绿的两层 就是fully connected layer 将1 1 4096的向量 变成1 1 1000的向量 代码示例 import torch import torchvision from torch im
  • dwr 使用 callback 多个参数(间接方法)

    dwrInvokeDataClaimAction findSupplierByName payee callback function returnData bringOutSupplierCallback returnData arg1
  • 【Redis】List类型和底层原理

    文章目录 List类型 1 List介绍 1 1常用命令 2 List底层实现 3 ziplist剖析 3 1ziplist结构 3 2创建一个空的ziplist 3 3ziplist的元素节点结构 3 4ziplisqt的连锁更新 3 5
  • Java 集合(List与LinkedList)接口详解

    List接口 List接口的定义 List interface List extends Collection 通过观察List接口的定义发现其继承得是Collection接口 List Set Queue接口继承的都是Collection
  • [持续开源中]用2000元左右做水下机器人

    1 水下机器人功能 1 平稳的运动控制 2 高清视频 3 定深悬停 巡航 2 相关技术 2 1 PC上位机 1 C Winform MVC 现有 2 C MAUI MVVM Socket 开发中 2 2 下位机 水下机器人 2 2 1 So
  • 最长连续子序列的起始位置

    用结构体保存结果 注意的是最长连续子序列需要的是连续 所以dp的状态方程别写错了 include
  • inotify_init使用

    用于监控文件 目录的修改创建删除等操作 也可以配合epoll使用 include