Драйвер знает, когда карта защищена от записи, и он фактически предупреждает, когда вы монтируете ее через командную строку:
# mount /dev/sdc1 /media/flash
mount: block device /dev/sdc1 is write-protected, mounting read-only
Если вы хотите проверить это самостоятельно на уровне устройства, вы можете использовать команду hdparm
, чтобы запросить состояние диска только для чтения, включая SD-карту и USB-накопитель в целом. Эта программа должна быть доступна в большинстве дистрибутивов GNU / Linux, обычно в пакете с именем "hdparm".
Если вы не являетесь пользователем root, обязательно укажите полный путь к команде hdparm
; и это предполагает, что у вас есть разрешение на чтение вашей карты, конечно.
Например: моя SD-карта вставлена, определяется как /dev/sdc
, а вкладка защиты от записи находится на Unlock :
$ /sbin/hdparm -r /dev/sdc
/dev/sdc:
readonly = 0 (off)
Когда я передвинул вкладку защиты от записи на Блокировка , заново вставьте карту и снова введите команду:
$ /sbin/hdparm -r /dev/sdc
/dev/sdc:
readonly = 1 (on)
Если вы хотите сделать это в сценарии оболочки, вы можете попробовать что-то вроде:
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
работы.