Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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不’;I don’我不会以我所期望的方式通知你_C++_Inotify - Fatal编程技术网

C++ inotify不’;I don’我不会以我所期望的方式通知你

C++ inotify不’;I don’我不会以我所期望的方式通知你,c++,inotify,C++,Inotify,我创建了这个小片段,试图理解inotify是如何工作的。我的测试非常简单:我运行代码,然后用任何编辑器打开/home/qdii/test,修改它并保存文件。什么也没发生。我再次修改文件并保存,然后显示“已接收事件”。从那一刻起,再次修改文件将不再触发任何事件 我希望inotify在每次修改文件时都会发出“event received”。我做错了什么 #包括 #包括 #包括 #包括 #包括 #包括 int main() { const int fd=inotify_init(); inotify_

我创建了这个小片段,试图理解inotify是如何工作的。我的测试非常简单:我运行代码,然后用任何编辑器打开/home/qdii/test,修改它并保存文件。什么也没发生。我再次修改文件并保存,然后显示“已接收事件”。从那一刻起,再次修改文件将不再触发任何事件

我希望inotify在每次修改文件时都会发出“event received”。我做错了什么

#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
const int fd=inotify_init();
inotify_添加_手表(fd,“/home/qdii/test”,在_MODIFY中);
while(true)
{
const size\u t buf\u size=sizeof(结构索引事件);
字符大小[buf_size];
如果(读取(fd、buf、buf_大小)>=0)

std::cout这是意料之中的。大多数编辑器并不(总是)就地编辑文件,而是创建临时文件,并在保存时玩取消链接/重命名游戏(为了不丢失数据)

由于您没有跟踪文件删除事件,因此您不知道正在跟踪的文件已丢失。如果要在编辑器保存后继续跟踪新创建的文件(同名),则需要删除原始手表,然后重新添加它(最好在为正在工作的目录创建文件时遵循监视触发器)


其他注意事项:
sleep
在那里是不必要的,也是适得其反的。
read
是阻塞的,这样你就不会在什么事情都没有发生的时候浪费CPU,而睡眠会增加你错过事件的机会。

sleep
是以前尝试
inotify_init1(in_NONBLOCK)失败后的遗留物
但是谢谢你的解释:)我刚刚用
echo a>/home/qdii/test进行了测试,结果证明效果很好。再次感谢。哦,顺便说一句,我正在观看文件修改,而不是文件删除。这并不是说它改变了什么。如果你也在观看删除,你会注意到这种行为的。