Согласно руководству по процессу, можно отслеживать изменения точки монтирования в системе Linux, открыв "/ proc / mounts" и добавив дескриптор файла для чтения fd_set
в вызов select ()
.
Следующий фрагмент кода работает в Ubuntu 9.04, но не в Ubuntu 10.04 (с ядром 2.6.32 linux):
int mfd = open("/proc/mounts", O_RDONLY, 0);
fd_set rfds;
struct timeval tv;
int rv;
FD_ZERO(&rfds);
FD_SET(mfd, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
int changes = 0;
while ((rv = select(mfd+1, &rfds, NULL, NULL, &tv)) >= 0) {
if (FD_ISSET(mfd, &rfds)) {
fprintf(stdout, "Mount points changed. %d.\n", changes++);
}
FD_ZERO(&rfds);
FD_SET(mfd, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
if (changes > 10) {
exit(EXIT_FAILURE);
}
}
Дескриптор файла всегда доступен для чтения на одной машине, поэтому он продолжает появляться при вызове select. Даже в креплениях нет никаких изменений.
Я что-то здесь упускаю?
Заранее благодарим за любую помощь!
/ proc / [pid] / mounts (начиная с Linux 2.4. 19)
Это список всех файловых систем, смонтированных в настоящее время в пространстве имен монтирования процесса. Формат этого файла задокументирован в fstab (5). Начиная с версии ядра 2.6.15, этот файл можно опросить: после открытия файла для чтения изменение в этом файле (т. Е. Подключение или отключение файловой системы) заставляет select (2) пометить файловый дескриптор как доступный для чтения, а poll ( 2) и epoll_wait (2) помечают файл как имеющий состояние ошибки.