我的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)系统调用来完成,但是通常需要超级用户权限。

无论您如何安装它,在拔下拇指驱动器之前都要确保先卸载它,以确保所有数据都已写入并且是最新的。

关于c - 在拇指驱动器上使用open(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6285628/

10-12 15:02