Aktywne Wpisy
Przegrywex +23
Napisz markę, model i rocznik samochodu (może być też rodzaj paliwa i silnik), a powiem ci czy jesteś chuop czy oski.
#motoryzacja #przegryw #samochody #glupiewykopowezabawy
#motoryzacja #przegryw #samochody #glupiewykopowezabawy
m__w +141
Potrzebuję w programie napisanym w języku C wykryć że karta pamięci się zyebała. Mówiąc prościej wykryć kiedy została zamontowana w trybie read only.
Próbowałem za pomocą takiej funkcji:
https://linux.die.net/man/2/statvfs
int statvfs(const char *path, struct statvfs *buf);
W uzyskanej strukturze jest pole unsigned long fflag
i sprawdzając flagę STRDONLY nic się nie dzieje. tzn taki kod:
struct statvfs vfs;
statvfs("/dev/mmcblk0p1", &vfs);
if(vfs.f_flag & ST_RDONLY != 0) {
perror("SDcard read only!");
}
Nie zgłasza mi błędu mimo że w /proc/mounts mam kartę zamontowaną tak(read only):
/dev/mmcblk0p1 /mnt/sdcard vfat ro,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro 0 0
Ma ktoś jakieś z tym doświadczenia? Albo pomysły?
@QBA__: Jesteś pewien, że chcesz tu użyć koniunkcji bitowej, a nie logicznej?
Dobra. Już mam. Jak podam ścieżkę do urządzenia czyli /dev/mmcblk0p1 to zawsze zwróci mi to samo czyli ta flaga nie będzie ustawiona.
Jak podam ścieżkę montowania czyli /mnt/sdcard to działa tak jak powinno. Czyli wypisuje błąd jeśli pliki na karcie są read-only
Dzięki mirku za próbę pomocy
Przy okazji ciekawa rzecz na przyszłość.
W zależności od tego czy to duży desktopowy Linux - tam jest automatyczna obsługa wielu typów systemu plików będzie to polecenie:
-a to opcja automatycznej naprawy.
Najpierw odmontuj kartę poleceniem umount.
Wiec zwraca ci parametry zamontowania /dev (lub /).