inotify_event中文件名变长的内存处理

最近在使用inotify做文件系统变化的监控时,对inotify_event中的name的内存对齐理解出现了误差,在此记录一下。

文件事件通过inotify_event 结构体表示,它通过使用文件读取函数 read (文件描述符由inotify_init() 返回)来获得,结构体内容如下:

struct inotify_event {
        __s32           wd;             /* watch descriptor */
        __u32           mask;           /* watch mask */
        __u32           cookie;         /* cookie to synchronize two events */
        __u32           len;            /* length (including nulls) of name */
        char            name[0];        /* stub for possible name */
};

结构中的 wd 为被监视目标的 watch 描述符,mask 为事件掩码,len 为 name字符串的长度,name 为被监视目标的路径名,该结构的 name 字段为一个桩,它只是为了用户方面引用文件名,文件名是变长的,它实际紧跟在该结构的后面,文件名将被 0 填充以使下一个事件结构能够 4 字节对齐。注意,len 也把填充字节数统计在内,在实际使用时,最好通过strlen来获取文件名的真实长度。

参考博客:

https://www.cnblogs.com/samdyhc/p/9300270.html

http://linux.chinaitlab.com/kernel/391147_4.html

你可能感兴趣的:(linux)