net*_*ain 5 mount system-calls go
我正在尝试使用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)
}
Run Code Online (Sandbox Code Playgroud)
输出:
main.go:47: Mount("/dev/sdd1", "/tmp/sdd1", "auto", 0, "ro")
main.go:48: no such device
Run Code Online (Sandbox Code Playgroud)
我正在使用具有“ 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。
| 归档时间: |
|
| 查看次数: |
2580 次 |
| 最近记录: |