マウントポイントなのか通常のディレクトリなのか

Linuxで任意のディレクトリが通常のディレクトリなのか、
それとも別のボリュームがマウントされたマウントポイントなのかを
その時々で調べる必要に迫られました。
最初は”lost+found”ディレクトリがあるかどうかで判定しようと考えたのですが、
これだと完全ではないので何か方法はないのか調べてみると、
“/proc/self/mountinfo”の出力から分かることにたどり着きました。
例えば、”/opt”がマウントポイントかどうかは以下のようなコード(C言語)で判別できます。

FILE *fp;
int f;
char buff[128];
if((fp=fopen("/proc/self/mountinfo","r"))==NULL)
    return;
f=1;
while(fgets(buff,sizeof(buff),fp)){
    if(strstr(buff,"/opt")){
        f=0;
        break;
    }
}
if(f){
    // /opt is normal directory.
}
else{
    // /opt is mountpoint.
}
fclose(fp);

こういうことが必要になるケースはそうはないと思いますが、
組み込み用途では活用できるかもしれません。

広告