inotify和epoll结合使用的小例子

本文介绍如何将inotify与epoll结合,用于监测文件系统变化。当检测到指定目录中的文件创建或删除时,该机制会触发通知,并动态添加或移除文件到epoll监控列表。当文件可读时,利用epoll读取文件内容。
摘要由CSDN通过智能技术生成

个人能力有限,文中有不当和错误给您带来的不便还请谅解。

用inotify可以检测文件系统中文件和目录发生的变化,而epoll可以同时检测多个文件。这里将epoll和inotify结合起来使用,测试这样一种情况:指定相应目录,当目录中有文件创建或者删除时有相应的通知信息并把文件添加或者移除epoll的检测机制,当文件可读时,通过epoll机制将指定的文件的内容读取出来。

基于这个功能实现的例子如下所示:

#include <stdio.h>
#include <sys/inotify.h>
#include <sys/epoll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>


#define BUFFER_SIZE		512		// 定义缓冲区的大小
#define ARRAY_LENGTH	128		// 定义数组的长度
#define NAME_LENGTH		128		// 定义文件名长度的限制

/* 定义epoll最大监听的文件数量 */
#define EPOLL_MAX_EVENTS	32

/* 定义一个结构体用来存放一个文件对应的文件描述符和文件名 */
struct file_name_fd_desc {
	int fd;							// 文件的描述符
	char name[32];					// 文件名
	char base_name[NAME_LENGTH];	// 带绝对路径的文件名
};

/* 定义一个epoll事件的数组,用来存放监听文件的信息 */
static struct epoll_event g_PendingEventItems[EPOLL_MAX_EVENTS];

/* 定义一个数组用来存放对应文件的文件描述符和文件名 */
static struct file_name_fd_desc g_file_name_fd_desc[ARRAY_LENGTH];
static int array_index = 0;

/* 定义一个存放基目录册指针 */
static char *base_dir;

/*
 *	向epoll当中添加一个要监视的文件
 */
static int add_to_epoll(int epoll_fd, int fd)
{
	int result;
	struct epoll_event eventItem;
	
	mem
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值