C++ Inotify不适用于etc/passwd
我正在尝试为/etc目录中的passwd文件设置listner,并且只收到第一次密码更改的通知C++ Inotify不适用于etc/passwd,c++,linux,inotify,C++,Linux,Inotify,我正在尝试为/etc目录中的passwd文件设置listner,并且只收到第一次密码更改的通知 fd = inotify_init(); wd = inotify_add_watch (fd, "/etc/passwd", IN_MODIFY); while(1) { read (fd, buff, BUFF_SIZE); struct inotify_event *event = ( struct inotify_event * ) &buff[ i ]; printf("Eve
fd = inotify_init();
wd = inotify_add_watch (fd, "/etc/passwd", IN_MODIFY);
while(1)
{
read (fd, buff, BUFF_SIZE);
struct inotify_event *event = ( struct inotify_event * ) &buff[ i ];
printf("Event Len - %d wd %d \n", event->len, event->wd);
}
为什么它第一次工作而不是以后?我每次更改密码时都会看到时间戳的变化。同一组代码可以很好地用于其他文件。当更改
/etc/passwd
时,大多数应用程序会创建一个新文件并重命名它。这将提供一个新的inode编号。当更改/etc/passwd
时,大多数应用程序会创建一个新文件并重命名它。这将提供一个新的inode编号。请记住,大多数(如果不是所有)Linux发行版都使用,因此更改密码实际上可能不会改变/etc/password
。是的,代码不会编译,我只是想知道我正在尝试做什么。如果我复制实际的代码,它是如此之大。好的,文件的inode正在更改。现在我有两个选项,为/etc目录添加watch,或者删除之前的watch并再次为passwd添加watch。谁能说哪一个是更好的选择?如果我为etc添加listner,这不是开销吗?还是会导致事件溢出?在另一种情况下,我如何确保在创建新的passwd文件之后添加listner?记住大多数(如果不是所有)Linux发行版都使用了,所以更改密码实际上可能不会真正改变/etc/password
。是的,代码不会编译,我只想知道我正在尝试做什么。如果我复制实际的代码,它是如此之大。好的,文件的inode正在更改。现在我有两个选项,为/etc目录添加watch,或者删除之前的watch并再次为passwd添加watch。谁能说哪一个是更好的选择?如果我为etc添加listner,这不是开销吗?还是会导致事件溢出?在另一种情况下,如何确保在创建新的passwd文件后添加listner?