个人能力有限,文中有不当和错误给您带来的不便还请谅解。
用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