我正在使用Linux Inotify来检测程序中的FS事件。
如果设备挂载在受监控目录上,我如何得到通知?
答案 0 :(得分:9)
我认为你不能用inotify
做到这一点。这是方法:
"ACTION"
不是"mount"
的内容。"mount"
行动的事件时"/proc/mounts"
。答案 1 :(得分:4)
编辑:更新已过时不到5年
如果您使用的是最古老的系统,libudev就是您想要的第一步。
如果您正处于这十年的某些事情,udisks也将为您完成所有这些工作。您需要查看org.Freedesktop.DBus.ObjectManager上的/org/freedesktop/UDisks2界面,了解新filesystems何时开启。
答案 2 :(得分:2)
在现代Linux系统上/ etc / mtab经常指向/ proc / self / mounts:
$ ls -l /etc/mtab
lrwxrwxrwx 1 root root 12 Sep 5 2013 /etc/mtab -> /proc/mounts
$ ls -l /proc/mounts
lrwxrwxrwx 1 root root 11 Jul 10 14:56 /proc/mounts -> self/mounts
proc(5)manpage说你真的不需要为这个文件使用inotify,它是可轮询的:
从内核版本2.6.15开始,这个 文件是可轮询的:打开文件进行读取后,进行更改 在此文件中(即文件系统挂载或卸载)导致 select(2)将文件描述符标记为可读,并轮询(2) 和epoll_wait(2)将文件标记为有错误条件。
想知道为什么inotify不能在/ etc / mtab上运行并找到这个联机帮助页。
答案 3 :(得分:1)
如果您不介意批次错误警报,您可以在close_nowrite
上关注/etc/fstab
。 。观看/etc/mtab
,/proc/mounts
等不适合我。
答案 4 :(得分:1)
inotify只会告诉你有关卸载的信息,并且uevents不再告诉你有关mount / unmount的信息。
要做的是在/ proc / mounts上进行轮询,读入内容,并跟踪您看到的坐载,然后在轮询唤醒时重新解析。当挂载或卸载任何文件系统时,轮询将在ERR / PRI上唤醒。
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = pdborcl))
)
上面的代码只是在启动时打印出挂载点,然后在任何挂载/卸载时打印出来。由你来“区分”它们以找出添加/删除的内容。
请注意,在过去的Linux版本中,所有这些技术都不稳定和/或破坏。它在Linux 2.6.35的末尾(或者可能更早一点)得到了稳定。