Monitorización de los cambios de punto de montaje a través de / proc / mounts

egún el manual de proceso, uno puede monitorear los cambios en el punto de montaje en el sistema Linux abriendo "/ proc / mounts" y agregando el descriptor de archivo para leerfd_set inselect() llamada

El siguiente fragmento de código funciona en Ubuntu 9.04 y no en Ubuntu 10.04 (con el kernel de Linux 2.6.32):

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);
    }
}

Fragmento compatible.

El descriptor de archivo siempre se puede leer en una máquina y, por lo tanto, sigue apareciendo en la llamada de selección. Incluso no hay cambios en las monturas.

¿Me estoy perdiendo de algo

¡Gracias de antemano por cualquier ayuda

man 5 proc:

/ proc / [pid] / mounts (desde Linux 2.4.19)

Esta es una lista de todos los sistemas de archivos actualmente montados en el espacio de nombres de montaje del proceso. El formato de este archivo está documentado en fstab (5). Desde la versión del kernel 2.6.15, este archivo es sondeable: después de abrir el archivo para leerlo, un cambio en este archivo (es decir, un sistema de archivos montado o desmontado) hace que select (2) marque el descriptor del archivo como legible y sondee ( 2) y epoll_wait (2) marcan que el archivo tiene una condición de error.

Respuestas a la pregunta(4)

Su respuesta a la pregunta