系列文章
目录
1.INotify
1.1 简介
INotify是一个Linux内核所提供的一种文件系统变化通知机制。它可以为应用程序监控文件系统的变化,如文件的创建、删除、读写等。当监听的文件发生相应的操作时,可以通过read函数从INotify中读取事件。
1.2 如何使用?
第一步:通过inotify_init()创建一个inotify对象。
第二步:通过inotify_add_watch将一个或多个监听添加到inotify对象中。
第三步:当事件发生时,通过read()函数从inotify对象中读取监听事件。
第四步:消费事件。
//第一步:通过inotify_init()创建一个inotify对象。
int notifyfd = inotify_init();
//第二步:监听此notify fd
int watchnotifyfd = inotify_add_watch(notifyfd,"/data", IN_CREATE | IN_DELETE);
//监听data目录下是否有设备的添加和删除事件
if (watchnotifyfd < 0) {
return 0;
}
//第三步:当事件发生时,通过read()函数从inotify对象中读取监听事件。
struct inotify_event *event;
char *p;
char buf[256] ={0};
ssize_t recvLen = read(notify_fd, buf, DEFAULT_BUF_LEN);//从notify的fd中读取消息等到buf中
//返回的是读取的字节数
for(p = buf;p<buf +recvLen;)
{
event = (struct inotify_event*) p;
uint32_t len = event->len;//len是event中name的长度
event->name[len] = '\0';//给字符数组最后一位添加\0
if(event ->mask & IN_DELETE)
{//此时是删除设置事件
}
else if(event ->mask & IN_CREATE)//此时是增加设备事件
{
//第四步:消费事件
}
p += sizeof(struct inotify_event) + event->len;//指针向后移动,处理下一个事件
}
1.3 原理介绍
INotify主要有两个基本对象。分别是inotify对象和watch对象。
1.3.1 inotify对象
Inotify对象对应了一个队列,应用程序可以向inotify对象添加多个监听。当监听的文件发生相应的操作时,可以通过read函数从INotify中读取事件。
inotify_init 是一个 Linux 系统调用,用于初始化 inotify实例并返回一个文件描述符,该文件描述符可以用于后续的inotify事件监听。inotify是Linux内核提供的一种文件系统事件监控机制,它允许应用程序监控文件或目录的更改,包括文件的打开、关闭、修改、移动或删除等操作。
创建方法如下:
int inotifyFd = inotify_init();
//inotify_init(void),该函数没有参数,并返回一个非负整数作为inotify实例的文件描述符。
//如果初始化失败,它会返回-1,并设置