Linuxでは ioctlの BLKROGETコマンドを使うと read onlyか
どうかが得られるようである。(Readonlyでマウントしたかどうか
ではなく、デバイスレベルで Readonlyかどうかという話です)
コード
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <linux/fs.h> int main(int argc, char *argv[]) { int fd, ret; int readonly; if (argc < 2) { printf("Usage: %s devpath\n", argv[0]); return 1; } fd = open(argv[1], O_RDONLY); if (fd < 0) { perror("read:"); } ret = ioctl(fd, BLKROGET, &readonly); if (ret != 0) { perror("ioctl(BLKROGET)"); } printf("@@ %s is %s\n", argv[1], readonly ? "readonly" : "not readonly"); close(fd); return 0; }
テスト
Write Protect無効の SDカード
% sudo ./a.out /dev/mmcblk0 @@ /dev/mmcblk0 is not readonly
Write Protect有効の SDカード
% sudo ./a.out /dev/mmcblk0 @@ /dev/mmcblk0 is readonly
ちゃんと反映されるようです。