这几天要做事件触发的数据更新操作,但是数据是在共享内存中的(可能是mmap创建的,也可能是Posix 的shm_open等得到的,还可能是System V中的共享内存)。监听风云 | inotify 实现原理 - 掘金
因为inotify实际上监控的inode相关的系统调用,如果使用共享内存或者内存映射时使用的指针对数据区进行操作,那么并不会触发IN_MODIFIED事件。如果想用共享内存或者内存映射,则需要进行变通。同样的,对于/proc/下的文件的监控,inotify也是无能为力的,因为这些是伪文件系统,是内核提供给用户的一种交互接口。
这里给出一个无赖的使用方法,对于能拿到fd的共享内存或者内存映射,在把数据区的内容都使用指针进行处理完后(比如使用memcpy,或者赋值语句后),使用write(fd,char,pos)这样的操作修改一个共享内存或者内存映射中的某个字节,这样就算使用了系统调用,inotify就能监控到该事件啦。