gpt4 book ai didi

golang 在 syscall.Mount 中没有这样的设备

转载 作者:IT王子 更新时间:2023-10-29 01:27:11 29 4
gpt4 key购买 nike

我正在尝试使用 syscall.Mount 函数挂载 USB 随身碟并将文件系统自动检测到某个文件夹。我从内核的 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) which doesn't itself support the concept of an "auto" fstype .

mount(8) command 使用 "auto" 的原因是因为 it does its own magic :

If no -t option is given, or if the auto type is specified, mount will try to guess the desired type. Mount uses the blkid library for guessing the filesystem type; if that does not turn up anything that looks familiar, mount will try to read the file /etc/filesystems, or, if that does not exist, /proc/filesystems.

关于golang 在 syscall.Mount 中没有这样的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35482778/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com