【发布时间】:2014-04-23 05:10:37
【问题描述】:
我的 USB 拇指驱动器上有一个 EXT2 分区,我无法让 C 函数 open() 返回 -1 以外的任何内容。
分区管理器说分区位于 /dev/sdb2 而我的代码说
int fd = open("/dev/sdb2", O_RDONLY);
但调试后,(fd == -1) 和我的 USB 通知程序说它之前或之后没有安装。
旁注:超级块和引导部分似乎填充了值...
【问题讨论】:
-
打开失败后
errno的值是多少? (你知道open不会不挂载那个分区,对吧?它会尝试直接打开块设备,允许你直接读/写到原始磁盘 - 非常危险 - 如果你有正确的权限) -
是的,我解释得不够好(我知道打开的目的)。如何找到 errno?
-
#include <errno.h>,#include <stdio.h>,然后在open,if (fd == -1) { perror("open failed"); exit(1); }或只是printferrno(它是一个整数)之后。 -
@Mat 我使用了
printf("%s\n", strerror(errno));并得到了权限被拒绝我如何授予权限? -
检查
/dev/sdb2的权限并使用具有适当权限的用户(可能:root)运行您的代码,或者更改设备上的权限。 警告这很危险。
标签: c file-io filesystems ext2