#define EVENT_SIZE (sizeof (struct inotify_event)) #define BUF_LEN (1024 * (EVENT_SIZE + NAME_MAX + 1)) char buf[BUF_LEN]; num = read(_fd, buf, BUF_LEN);
所以假设这允许一个 read() 调用以返回多达1024个事件。
read()
如果队列中的事件实际上比这个多怎么办?inotify会保证返回完整数量的事件吗,即使这意味着短读?或者inotify会将事件拆分为两次读取吗?
从 man 第页,共页 inotify :
man
inotify
指定读取(2)的缓冲区太小而无法返回时的行为 关于下一个事件的信息取决于内核版本:在 失败,错误为EINVAL。指定大小的缓冲区 sizeof(struct inotify\u事件)+NAME\u MAX+1 足以读取至少一个事件。
指定读取(2)的缓冲区太小而无法返回时的行为 关于下一个事件的信息取决于内核版本:在 失败,错误为EINVAL。指定大小的缓冲区
sizeof(struct inotify\u事件)+NAME\u MAX+1
足以读取至少一个事件。
所以历史上它是圆的 向下 EINVAL .
EINVAL