我有兴趣在 OSX(当前运行 10.9 Mavericks)上迭代所有已挂载的文件系统。我正在寻找类似于 getmntent() 或 mount shell 命令的输出的东西(尽管我想从目标 C 中执行此操作,因此解析 shell 命令的输出显然不是最佳的)。
我一直在研究磁盘仲裁框架,似乎可以使用该框架通知我挂载和卸载事件。我可能在那里遗漏了一些东西,但我不清楚是否有办法使用磁盘仲裁来迭代现有的挂载文件系统。
我已经探索过使用 getfsent(),它似乎可以提供一个解决方案,但经过测试,我发现我没有从迭代 getfsent() 中获得多个条目。请参阅以下代码:
struct fstab* fsentry;
setfsent();
fsentry = getfsent();
while(fsentry)
{
//do something with fsentry
fsentry = getfsent();
}
endfsent();
我在这里得到的唯一条目是 / 文件系统。我第二次调用 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() 得到一个结果有答案,我也会对此感兴趣。