0

我的 USB 拇指驱动器上有一个 EXT2 分区,我无法让 C 函数 open() 返回 -1 以外的任何内容。

分区管理器说分区位于 /dev/sdb2 并且我的代码说

int fd = open("/dev/sdb2", O_RDONLY);

但是在调试之后,(fd == -1)和我的usb通知器说它之前或之后没有安装。

旁注:超级块和引导部分似乎填充了值......

4

2 回答 2

0

打开/dev/sdb2将打开原始块设备访问拇指驱动器上的分区,如果您在分区上有文件系统,那根本不是您想要做的。您需要先挂载文件系统,然后才能通过挂载点访问其中的文件。大多数 linux 系统会在您插入拇指驱动器时自动挂载它——如果您mount在命令行键入,它将显示所有已挂载的文件系统以及它们的挂载位置。这可能会向您显示如下一行:

/dev/sdb2 on /media/usb type ext2 (...

在这种情况下,您打开/media/usb/file以访问file拇指驱动器上文件系统的根目录。

如果它没有自动挂载,您需要在访问它之前手动挂载它——您可以使用mount程序或程序中的 mount(2) 系统调用来执行此操作,但它通常需要超级用户权限。

无论您如何安装它,请确保在拔下 U 盘之前先卸载它,以确保所有数据都已写入并且是最新的。

于 2011-06-08T23:44:47.233 回答
0

在我的问题中打开拇指驱动器的代码是正确的,但程序要么需要以超级用户身份运行,要么chmod 777 /dev/sdb2

要查看这是否是您的问题,请使用上面的代码printf("Error: %s\n", strerror(errno));

于 2011-07-15T22:53:16.233 回答