Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Inotify不适用于etc/passwd_C++_Linux_Inotify - Fatal编程技术网

C++ Inotify不适用于etc/passwd

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

我正在尝试为/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("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?