簡體   English   中英

在Linux上的C ++中掛載NTFS設備?

[英]Mount NTFS device in C++ on linux?

我試圖在我的C ++應用程序中安裝外部驅動器。 我最初嘗試使用mount(2),但是失敗了:

int ret = mount(deviceName.c_str(), mountPoint.c_str(), fsType.c_str(), 0, NULL);

errno是19, ENODEV (內核中未配置文件系統類型)

但是,如果我切換到使用mount(8),它將運行良好:

std::string cmd = "mount -t " + fsType + " " + deviceName + " " + mountPoint;
int ret = system(cmd.c_str());

mount(2)是否有其他可接受文件系統類型的列表? 這是一個ntfs設備,因此我將ntfs-3g用作fstype。 我檢查了/ proc / filesystems,發現它沒有列出,所以我嘗試了fuseblk但這只是將錯誤更改為22 EINVAL

使用mount(2)掛載NTFS設備的正確方法是什么?

mount.2只是一個內核調用。 mount.8是一個完整的外部工具,其功能超出了內核的范圍。

我認為您可能正在尋找libmount ,它是一個實現了mount.8完成的整個安裝魔術的mount.8 較新的安裝版本也使用它。 它在util-linux中提供

您是否嘗試過使用strace命令運行mount(8) 它將打印出程序進行的系統調用,包括mount(2) 當我進行這樣的安裝時,它會生成mount.ntfs (它是NTFS-3g),然后為fuseblk進行mount ,然后旋轉到后台以支持該安裝點。

基於FUSE的文件系統的處理方式有所不同,因為必須啟動用戶空間守護程序。 使用fuseblk並沒有為內核提供足夠的信息來啟動守護程序(並且內核甚至沒有真正的信息來啟動守護程序)。 對於ntfs-3g,通常會執行類似ntfs-3g /dev/sda1 /mnt/windows (通過幫助)。 沒有一種編程方式可以告訴內核執行此操作,因為它發生在用戶空間中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM