inotify сообщает только о размонтировании, а uevents больше не говорит о монтировании / размонтировании.
Способ сделать это - опросить / proc / mounts, прочитать содержимое и отследить горы, которые вы видели, а затем повторить анализ, когда опрос проснется. Опрос активируется при ERR / PRI, когда любая файловая система смонтирована или отключена.
#include <fcntl.h>
#include <errno.h>
#include <poll.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int fd;
struct pollfd ev;
int ret;
ssize_t bytesread;
char buf[8192];
fd = open("/proc/mounts", O_RDONLY);
printf("########################################\n");
while ((bytesread = read(fd, buf, sizeof(buf))) > 0)
write(1, buf, bytesread);
do {
ev.events = POLLERR | POLLPRI;
ev.fd = fd;
ev.revents = 0;
ret = poll(&ev, 1, -1);
lseek(fd, 0, SEEK_SET);
if (ev.revents & POLLERR) {
printf("########################################\n");
while ((bytesread = read(fd, buf, sizeof(buf))) > 0)
write(1, buf, bytesread);
}
} while (ret >= 0);
close(fd);
return 0;
}
Приведенный выше код просто распечатывает точки монтирования при запуске, а затем при любом монтировании / размонтировании. От вас зависит, будут ли они "различаться", чтобы узнать, что было добавлено / удалено.
Обратите внимание, что все эти методы были нестабильны и / или не работали в предыдущих версиях Linux. Все это стало стабильным в конце Linux 2.6.35 (или, может быть, чуть раньше).