驱动知道卡何时被写保护,当你通过命令行挂载它时它实际上会发出警告:
# mount /dev/sdc1 /media/flash
mount: block device /dev/sdc1 is write-protected, mounting read-only
如果您想在设备级别自行检查,可以使用hdparm command查询磁盘设备的只读状态,一般包括SD卡和USB闪存驱动器。这个程序应该在大多数 GNU/Linux 发行版中都可用,通常在一个名为“hdparm”的包中。
如果您不是root,请务必指定hdparm 命令的完整路径;当然,这假设您已读取卡上的权限。
例如:我的SD卡插入,检测为/dev/sdc,写保护标签在解锁:
$ /sbin/hdparm -r /dev/sdc
/dev/sdc:
readonly = 0 (off)
当我将写保护选项卡滑动到锁定时,重新插入卡,然后再次运行命令:
$ /sbin/hdparm -r /dev/sdc
/dev/sdc:
readonly = 1 (on)
如果您想在 shell 脚本中执行此操作,可以尝试以下操作:
READONLY=`/sbin/hdparm -r /dev/sdc 2>&1 | sed -n 's/^.*= *\([01]\) .*$/\1/p'`
if [ "$READONLY" = "0" ]
then
echo Card is writable.
else
echo Card is not writable.
fi
注意:如果您更喜欢在 C 中执行此操作,您可以尝试:
- 以写入模式打开设备文件并查看它是否失败并显示
errno 值EROFS(只读文件系统),或者...
- 以读取方式打开设备文件,然后发出
ioctl()命名为BLKROGET,并检查结果值是否非零;这就是hdparm 的工作方式。