2014-09-19 49 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

相關問題