c/c++语言开发共享如何在C中使用inotify?

我搜索了与inotify相关的问题,这个问题有点不同……

我使用以下代码来监视一个文件(而不是目录)的更改。 在测试中,当我保存目标文件时,read()会返回,这意味着它可以工作。 但是event-> mask是32768,它不是IN_MODIFY,名称是空的。 另一个问题:它无法持续监控。 当我第二次更改文件时,它没有响应。 感谢您的帮助!

#include  #include  #include  #define EVENT_SIZE (sizeof (struct inotify_event)) #define BUF_LEN (16 * (EVENT_SIZE + 16)) int main() { int fd; fd = inotify_init(); if (fd < 0) perror("inotify_init()"); int wd; wd = inotify_add_watch(fd, "target.txt", IN_MODIFY); if (wd  0) { int i = 0; while (i wd, event->mask, event->cookie, event->len); if (event->mask & IN_MODIFY) printf("file modified %s", event->name); if (event->len) printf("name=%sn", event->name); i += EVENT_SIZE + event->len; } } goto start; return 0; } 

    0x8000对应于IN_IGNORED 。 它在掩码中的存在表明因为文件已被删除而已删除了inotify手表。 您的编辑器可能删除了旧文件并将新文件放在其位置。 第二次更改文件没有效果,因为手表已被删除。

    由于您没有在观看目录,因此未返回该名称。

    inotify手册页 。

    name字段仅在为监视目录内的文件返回事件时才出现; 它标识相对于监视目录的文件路径名。

    IN_IGNORED – 显式删除了监视(inotify_rm_watch(2))或自动删除(文件已删除,或文件系统已卸载)。

    event-> mask 32768相当于0x8000,即IN_IGNORED。更多信息:“/ usr /include/linux/inotify.h”

      if (event->mask & IN_IGNORED) { /*Remove watch*/ inotify_rm_watch(fileDescriptor,watchDescriptor) /*Add watch again*/ inotify_add_watch } 

      以上就是c/c++开发分享如何在C中使用inotify?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/541930.html

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐