![](/img/trans.png)
[英]How to get the file system type for syscall.Mount() programmatically
[英]golang no such device in syscall.Mount
我正在嘗試使用syscall.Mount函數來安裝USB PenDrive並將文件系統自動檢測到某個文件夾。 我從內核的netlink套接字獲取設備路徑,並嘗試將其安裝到/tmp/+devicename
,在我的實例中/dev/sdd1
應該安裝到/tmp/sdd1
我在go程序中有以下代碼行
if err := syscall.Mount(src, target, "auto", 0, "ro"); err != nil {
log.Printf("Mount(\"%s\", \"%s\", \"auto\", 0, \"ro\")\n",src,target)
log.Fatal(err)
}
輸出:
main.go:47: Mount("/dev/sdd1", "/tmp/sdd1", "auto", 0, "ro")
main.go:48: no such device
我正在使用具有“ sudo”的root特權的應用程序,但是它似乎無法使用syscall軟件包進行掛載。 但是,如果我在終端類型中輸入sudo mount /dev/sdd1 /tmp/sdd1
則工作正常。
這是什么問題? 使用系統調用時,設備路徑是否有所不同?
任何幫助表示贊賞。 干杯
您沒有指定操作系統,但我認為在許多實現中問題都是相同的。
在Linux上, syscall.Mount
只包裝mount(2)
,它本身不支持“自動” fstype的概念 。
mount(8)
命令與"auto"
的原因是因為它具有自己的魔力 :
如果未給出-t選項,或者如果指定了自動類型,則mount將嘗試猜測所需的類型。 掛載使用blkid庫來猜測文件系統類型 ; 如果沒有發現任何看起來熟悉的東西,mount將嘗試讀取文件/ etc / filesystems;如果不存在,則嘗試讀取
/proc/filesystems
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.