我的usb拇指驱动器上有一个EXT2分区,我不能让C函数open()返回-1以外的任何东西。
分区管理器说分区位于/ dev / sdb2,我的代码是
int fd = open("/dev/sdb2", O_RDONLY);
但是在调试之后,(fd == -1)和我的usb通知程序说它没有在之前或之后安装。
备注:超级块和引导部分似乎填充了值......
答案 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));