在拇指驱动器上使用open()

时间:2011-06-08 21:42:15

标签: c file-io filesystems ext2

我的usb拇指驱动器上有一个EXT2分区,我不能让C函数open()返回-1以外的任何东西。

分区管理器说分区位于/ dev / sdb2,我的代码是

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:0)

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

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