我的 USB 拇指驱动器上有一个 EXT2 分区,我无法让 C 函数 open() 返回 -1 以外的任何内容。
分区管理器说分区位于 /dev/sdb2 并且我的代码说
int fd = open("/dev/sdb2", O_RDONLY);
但是在调试之后,(fd == -1)和我的usb通知器说它之前或之后没有安装。
旁注:超级块和引导部分似乎填充了值......
我的 USB 拇指驱动器上有一个 EXT2 分区,我无法让 C 函数 open() 返回 -1 以外的任何内容。
分区管理器说分区位于 /dev/sdb2 并且我的代码说
int fd = open("/dev/sdb2", O_RDONLY);
但是在调试之后,(fd == -1)和我的usb通知器说它之前或之后没有安装。
旁注:超级块和引导部分似乎填充了值......
打开/dev/sdb2
将打开原始块设备访问拇指驱动器上的分区,如果您在分区上有文件系统,那根本不是您想要做的。您需要先挂载文件系统,然后才能通过挂载点访问其中的文件。大多数 linux 系统会在您插入拇指驱动器时自动挂载它——如果您mount
在命令行键入,它将显示所有已挂载的文件系统以及它们的挂载位置。这可能会向您显示如下一行:
/dev/sdb2 on /media/usb type ext2 (...
在这种情况下,您打开/media/usb/file
以访问file
拇指驱动器上文件系统的根目录。
如果它没有自动挂载,您需要在访问它之前手动挂载它——您可以使用mount
程序或程序中的 mount(2) 系统调用来执行此操作,但它通常需要超级用户权限。
无论您如何安装它,请确保在拔下 U 盘之前先卸载它,以确保所有数据都已写入并且是最新的。
在我的问题中打开拇指驱动器的代码是正确的,但程序要么需要以超级用户身份运行,要么chmod 777 /dev/sdb2
要查看这是否是您的问题,请使用上面的代码printf("Error: %s\n", strerror(errno));