8

OSX(現在10.9 Mavericksを実行中)にマウントされたすべてのファイルシステムを反復することに興味があります。getmntent() またはマウント シェル コマンドの出力に似たものを探しています (ただし、目的の C から実行したいので、シェル コマンドの出力の解析は明らかに最適ではありません)。

ディスク アービトレーション フレームワークを少し調べたところ、このフレームワークを使用してマウント イベントとアンマウント イベントについて通知を受けることができるようです。そこに何かが欠けているかもしれませんが、Disk Arbitration を使用して既存のマウントされたファイル システムを繰り返す方法があるかどうかはわかりません。

getfsent() を使用して解決策を提供するように見えましたが、テストした後、getfsent() を繰り返しても複数のエントリが得られないことがわかりました。次のコードを参照してください。

struct fstab* fsentry;
setfsent();
fsentry = getfsent();
while(fsentry)
{
    //do something with fsentry
    fsentry = getfsent();
}
endfsent();

ここで得られる唯一のエントリは、/ ファイル システム用です。2 回目に getfsent() を呼び出すと、それ以上エントリがないかのように NULL が返されます。mount コマンドは、マウントされた cifs/smb ファイル システムを含むいくつかの他のものを表示します。

/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
//user@<ip address>/public on /Volumes/public (smbfs, nodev, nosuid, mounted by user)

getfsent() が期待どおりの動作を開始したように見えますが、何らかの理由で停止しますか?

要約すると、私の質問は次のとおりです。OSX でファイル システムを反復処理する最良の方法は何ですか?

getfsent() から1つの結果しか得られない理由について誰かが答えを持っているなら、私もそれに興味があります。

4

1 に答える 1