首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fanotify gremlin-硬不返回失败(在gdb下)

fanotify gremlin-硬不返回失败(在gdb下)
EN

Stack Overflow用户
提问于 2014-12-25 15:17:16
回答 1查看 42关注 0票数 0

这几乎与手册页中的示例相同。所有内容都会更新到最新版本。gcc是4.9.2岁。gdb是7.8.1。linux内核为3.17.6-1 (64位)。安装是最近的一次arch引导。以下是精简后的案例:

代码语言:javascript
复制
#define _GNU_SOURCE     /* Needed to get O_LARGEFILE definition */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <poll.h>

#include <sys/fanotify.h>


int main(int argc, char *argv[]) {
  int fd;

  fd = fanotify_init(FAN_CLOEXEC | FAN_CLASS_CONTENT | FAN_NONBLOCK, O_RDONLY | O_LARGEFILE);
  if (fd == -1) exit(1);

  fprintf(stderr, "calling fanotify_mark: fd=%d\n", fd);

  if (fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT, FAN_OPEN_PERM | FAN_CLOSE_WRITE, -1, "/") == -1) exit(2);

  fprintf(stderr, "in gdb step through with 'n' for repeat.\n");
  fprintf(stderr, "  (and sometimes otherwise), a ^C works, but a ^Z and then ^C does not.\n");
}

大多数情况下,这可以很好地工作,但有时并非如此。我想这就是fanotify_mark永远不会回来的时候。在尝试调试时,我发现我可以(不)复制它进行调试。如果我使用gdb并尝试使用'n‘单步执行,fanotify_mark()永远不会返回,并且是不可中断的(^C,^Z)。

这是否可以复制到其他地方,或者我做错了什么?

/iaw

EN

回答 1

Stack Overflow用户

发布于 2015-01-04 06:16:01

这是因为FAN_OPEN_PERM需要另一个程序来授予权限。这几乎与fanotify手册页中的示例完全相同-这使得它非常不幸,因为缩减程序可能会导致硬OS块。所以看着点。

我的实际意图是监视文件访问。为此,我们使用FAN_OPEN,而不是FAN_OPEN_PERM。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27645057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档