回到软盘的古老时代,如果启用对软盘的写保护,DOS会告诉您无法写入软盘。现在我们有SD卡,可以容纳数千张软盘的内容,而且我们仍然拥有写保护功能 - 而且它在某个时候非常方便。但是没有人能够告诉我,我至少在Linux上不能写信给它。我有一个可爱的脚本,以我喜欢的方式对SD卡进行分区和格式化。我花了半小时的时间调试才发现SD卡是写保护的。以编程方式检测SD卡写入保护
所以这个问题,有没有一种方法,软件可以检测到这种情况?
感谢,
回到软盘的古老时代,如果启用对软盘的写保护,DOS会告诉您无法写入软盘。现在我们有SD卡,可以容纳数千张软盘的内容,而且我们仍然拥有写保护功能 - 而且它在某个时候非常方便。但是没有人能够告诉我,我至少在Linux上不能写信给它。我有一个可爱的脚本,以我喜欢的方式对SD卡进行分区和格式化。我花了半小时的时间调试才发现SD卡是写保护的。以编程方式检测SD卡写入保护
所以这个问题,有没有一种方法,软件可以检测到这种情况?
感谢,
你可能只需要检查你使用任何程序(这意味着你的脚本应该检查其执行一切的返回值的返回值,并显示一条警告消息或跳伞适当当它看到意外的结果时)。在这里,我安装了它的写保护开关SD卡启用/媒体/系统,并试图用不同的命令写它:
$ cd /media/system
$ touch nonce
touch: cannot touch `nonce': Read-only file system
$ echo $?
1
$ echo hi > nonce
bash: nonce: Read-only file system
$ echo $?
1
$ cp ~/.bashrc nonce
cp: cannot create regular file `nonce': Read-only file system
$ echo $?
1
$
现在,我想在我的主目录中那些相同的命令:
$ cd
$ touch nonce
$ echo $?
0
$ echo hi > nonce
$ echo $?
0
$ cp .bashrc nonce
$ echo $?
0
$
另外值得指出的是,SD卡上的写保护是由读取设备执行的,而不是卡内部的任何内容:这意味着读取设备可以选择ignore that switch。
的驱动程序时,该卡是写保护,它实际上提醒,当你通过命令行安装知悉:
# 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
的工作方式。