比方说,在上传下载过程中,在未完成前会 产生一些中间文件,这对于本地或者服务器来说是有变化的,inotify是linux下用来监测文件系统变化的一个机制,如果对于这种中间文件一直监测,就会耗费很多资源,而且没有必要。
今天看到inotify_event的结构体是这样定义的:
struct inotify_event
{
int wd; /* The watch descriptor */
uint32_t mask; /* Watch mask */
uint32_t cookie; /* A cookie to tie two events together */
uint32_t len; /* The length of the filename found in the name field */
char name __flexarr; /* The name of the file, padding to the end with NULs */
}
各个字段内容解释如下:
wd 字段是指与事件相关联的监视器。如果每个 inotify 有一个以上的实例,您可以使用这个字段确定如何继续以后的处理过程。
mask字段由几个部分组成,它说明发生的事情。分别测试每个部分。当把一个文件从一个目录移动到另一个目录时,您可以使用 cookie 将两个事件绑在一起。仅当您监视源和目标目录时,inotify 才生成两个移动事件 — 分别针对源和目标 —,并通过设置 cookie 将它们绑定在一起。要监视一个移动操作,必须指定 IN_MOVED_FROM 或IN_MOVED_TO,或使用简短的 IN_MOVE,它可以监视两个操作。使用 IN_MOVED_FROM 和 IN_MOVED_TO 来测试事件类型。
最后,name 和 len 包含文件的名称(但不包括路径)和受影响文件的名称的长度。
我在想cookie这个字段是否保证了inotify不会没完没了的监测中间文件的更新,而是将其看做一个事件,不会产生很多个监控事件?
不知道自己理解的对不对,希望获得大家的帮助!:4_94: