Мониторинг изменений точки монтирования через / proc / mounts

Согласно руководству по процессу, можно отслеживать изменения точки монтирования в системе 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. Даже в креплениях нет никаких изменений.

Я что-то здесь упускаю?

Заранее благодарим за любую помощь!

man 5 proc:

/ proc / [pid] / mounts (начиная с Linux 2.4. 19)

Это список всех файловых систем, смонтированных в настоящее время в пространстве имен монтирования процесса. Формат этого файла задокументирован в fstab (5). Начиная с версии ядра 2.6.15, этот файл можно опросить: после открытия файла для чтения изменение в этом файле (т. Е. Подключение или отключение файловой системы) заставляет select (2) пометить файловый дескриптор как доступный для чтения, а poll ( 2) и epoll_wait (2) помечают файл как имеющий состояние ошибки.

10
задан Andrew Grimm 6 October 2011 в 22:53
поделиться