【发布时间】:2021-04-27 19:26:41
【问题描述】:
我对 read() 调用获取 inotify 事件感到非常困惑。
代码如下:
#define EVENT_SIZE sizeof(inotify_event)
int fd = inotify_init();
int wd = inotify_add_watch(fd, dir, IN_MODIFY);
void* p = malloc(sizeof(EVENT_SIZE));
read(wd, p, (EVENT_SIZE + 10));
我的测试文件是a.txt。
在gdb中调试后的输出是:
{wd = 0, mask = 0, cookie = 0, len = 0, name = 0x558f05d002d0 ""}
现在,当我将最后一行更改为 read(fd, p, (EVENT_SIZE + 16)); 时,我在 gdb 中得到的输出是:
{wd = 1, mask = 2, cookie = 0, len = 16, name = 0x5625cdd422d0 ".a.txt.swp"}
第一季度。为什么我没有收到溢出错误,因为在这两种情况下,我写的都超过了分配的缓冲区p?
第二季度。如果没有错误,那么我的第一个程序也应该可以工作,因为我的文件名小于 10,但它不起作用,它只适用于 16。我在这里缺少什么?
编译器 - g++ 9.3.0
操作系统-ubuntu 20.04
谢谢。
【问题讨论】: