2014-09-19 48 views
0

我想使用C++挂载文件系统。我应该使用mount()系统调用,还是只执行mount二进制文件?我应该使用mount()还是/ usr/bin/mount

很显然,系统调用会更快,而且我会花更少的时间来构建命令行参数并解析错误消息和内容。然而,在阅读了第(2)项之后,我不清楚论证中有什么限制(如果有的话)。

我特别希望能够挂载磁盘映像文件以及实际的物理磁盘。我也希望能够通过指定从设备/图像开始的偏移来安装单个文件系统。我不知道您是否可以通过一次性呼叫mount()来完成这项工作,或者您是否需要先手动创建循环设备。 (我也不知道它是如何努力创造一个循环设备—我假定这也很容易...)

如果设置这个东西了右边是相当复杂的,那么它可能更简单和易于调用二进制的mount。但如果只是一个系统调用,直接调用mount()似乎更清洁。那么哪一个可能会给我最少的问题呢?

+2

考虑到您通常安装文件系统的频率,我不会对性能提出任何问题。我只是尝试系统调用,因为它绝对是*清晰*,如果我在15分钟内无法使用它 - 二进制,我来了。请记住,您不应该相信它在'/ usr/bin/mount'上 - 总是调用'which mount'来确定它是否受支持以及它在哪里。 – 2014-09-19 10:17:33

+0

通常使用系统命令是应该避免的;我假设你知道这一点...... – 2014-09-19 10:18:37

+0

你可以获取'mount'的源代码并复制和粘贴你需要的东西。不考虑许可证问题... – rodrigo 2014-09-19 10:29:38

回答

1

那么,奈登建议运行strace mount,这不是一个坏主意。

做完了这个,看起来mount正在做一个地狱的很多工作。看起来它确实创建了一个循环设备并将其挂载。 (这意味着它需要弄清楚下一个未使用的循环设备编号是什么等)。听起来您可能还需要手动计算出文件系统类型。

简而言之,它看起来对我来说像一个简单的调用mount二进制可能会比尝试重新创建程序所做的一切要少得多的工作。我曾认为智能在内核中,但显然不是。

0

我的建议是使用系统调用。 如果你想知道你需要做的确切的调用,在strace或gdb下通过shell运行mount。

+0

这对于执行'mount -t auto'命令所做的工作并不容易。 [mount(2)](http://man7.org/linux/man-pages/man2/mount.2.html)系统调用需要知道文件系统类型。 – 2014-09-19 10:27:24