procマニュアルによると、「/ proc / mounts」を開き、読み取り呼び出しfd_set
にファイル記述子を追加することで、Linuxシステムのマウントポイントの変更を監視できます。select()
次のコードはUbuntu9.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);
}
}
ファイル記述子は常に1台のマシンで読み取り可能であるため、select呼び出しでポップアップし続けます。マウントに変更はありません。
ここで何かが足りませんか?
助けてくれてありがとう!
/ proc / [pid] / mounts(Linux 2.4.19以降)
これは、プロセスのマウント名前空間に現在マウントされているすべてのファイルシステムのリストです。このファイルの形式はfstab(5)に記載されています。カーネルバージョン2.6.15以降、このファイルはポーリング可能です。読み取り用にファイルを開いた後、このファイルを変更すると(つまり、ファイルシステムのマウントまたはアンマウント)、select(2)はファイル記述子を読み取り可能としてマークし、poll( 2)およびepoll_wait(2)は、ファイルにエラー状態があることを示します。