Доброго дня!
Необходимо монтировать SD-карту для записи файлов, для этого думаю использовать mount из libc (http://www.gnu.org/software/libc/manual/html_node/Mount_002dUnmount_002dRemount.html#Mount_002dUnmount_002dRemount)
Проблема в том, что одним из параметров команда принимает тип файловой системы. Пока сделал два вызова mount для vfat и ext3, буду проверять как работает.
Как возможно узнать тип файловой системы на сменном носителе до его монтирования?
Спасибо.
[РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
Модератор: Модераторы разделов
-
IMB
- Сообщения: 2567
- ОС: Debian
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
Код: Выделить всё
$ sudo file -s /dev/md0
/dev/md0: sticky Linux rev 1.0 ext4 filesystem data
$ sudo file -s /dev/md3
/dev/md3: sticky BTRFS Filesystem (label "home", sectorsize 4096, nodesize 16384, leafsize 16384)Но по-моему то, что вы делаете, это какой-то корявый подход.
почему бы просто не вызывать "/bin/mount -t auto ..."?
в *NIX-системах вызов внешних программ для выполнения отдельных задач является нормой, не обязательно ограничивать себя строго библиотеками.
Спасибо сказали:
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
Возможно Вы и правы.
Просто всё это будет работать на встраиваемой системе и чем меньше внешних зависимостей, тем меньше вероятность забыть собрать эту зависимость. А отлавливать проблему на готов изделии удовольствие меньше среднего.
Что ж, не буду не забывать о "запасном аэродроме" в виде system()
Просто всё это будет работать на встраиваемой системе и чем меньше внешних зависимостей, тем меньше вероятность забыть собрать эту зависимость. А отлавливать проблему на готов изделии удовольствие меньше среднего.
Что ж, не буду не забывать о "запасном аэродроме" в виде system()
-
liaonau
- Сообщения: 390
- ОС: gentoo
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
udev, например, использует blkid.
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
IMB писал(а): ↑25.02.2013 15:55Возможно Вы и правы.
Просто всё это будет работать на встраиваемой системе и чем меньше внешних зависимостей, тем меньше вероятность забыть собрать эту зависимость. А отлавливать проблему на готов изделии удовольствие меньше среднего.
Что ж, не буду не забывать о "запасном аэродроме" в виде system()
Уж mount всегда есть, а вот "file" может и не быть.
-
bormant
- Сообщения: 1354
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
Так в чём же, с учётом процитированного, проблема?man mount
mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
...
-t, --types vfstype
...
If no -t option is given, or if the auto type is specified, mount will try to guess the desired
type. Mount uses the blkid library for guessing the filesystem type; if that does not turn up
anything that looks familiar, mount will try to read the file /etc/filesystems, or, if that does
not exist, /proc/filesystems. All of the filesystem types listed there will be tried, except for
those that are labeled "nodev" (e.g., devpts, proc and nfs). If /etc/filesystems ends in a line
with a single * only, mount will read /proc/filesystems afterwards.
The auto type may be useful for user-mounted floppies. Creating a file /etc/filesystems can be
useful to change the probe order (e.g., to try vfat before msdos or ext3 before ext2) or if you
use a kernel module autoloader.
More than one type may be specified in a comma separated list. The list of filesystem types can
be prefixed with no to specify the filesystem types on which no action should be taken. (This can
be meaningful with the -a option.) For example, the command:
mount -a -t nomsdos,ext
mounts all filesystems except those of type msdos and ext.
ps. Параметры в квадратных скобках не являются обязательными.
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
В эффекте Даннинга - Крюгера, полагаю.
Используя libblkid из util-linux. Примерно так:
Код: Выделить всё
fd = open(devname, O_RDONLY);
blprobe = blkid_new_probe();
blkid_probe_set_device(blprobe, fd, 0, 0);
blkid_probe_enable_superblocks(blprobe, 1);
blkid_probe_set_superblocks_flags(blprobe, BLKID_SUBLKS_TYPE);
blkid_do_safeprobe(blprobe);
blkid_probe_lookup_value(blprobe, "FSTYPE", &data, NULL);
// data содержит тип ФССпасибо сказали:
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
вообще-то для man 2 mount такого не написано. Там написано
Код: Выделить всё
Values for the filesystemtype argument supported by the kernel are listed in /proc/filesystems (e.g., "minix", "ext2",
"ext3", "jfs", "xfs", "reiserfs", "msdos", "proc", "nfs", "iso9660"). Further types may become available when the appro‐
priate modules are loaded.и я что-то не нашёл там тип auto.
Т.ч. вопрос открыт.
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
drBatty писал(а): ↑27.02.2013 11:07
вообще-то для man 2 mount такого не написано. Там написано
Код: Выделить всё
Values for the filesystemtype argument supported by the kernel are listed in /proc/filesystems (e.g., "minix", "ext2", "ext3", "jfs", "xfs", "reiserfs", "msdos", "proc", "nfs", "iso9660"). Further types may become available when the appro‐ priate modules are loaded.
и я что-то не нашёл там тип auto.
Т.ч. вопрос открыт.
man mount
или если угодно man 8 mount
же.
If no -t option is given, or if the auto type is specified,
mount will try to guess the desired type.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
что, в mount(2) мне NULL передать можно? Пруфлинк можно? Я не нашёл.
-
bormant
- Сообщения: 1354
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
mount(2) (man 2 mount) документирует системный вызов mount(), mount(8) документирует команду пространства пользователя mount, отсылка к которой в этом разделе (Программирование) была ради указания на относительно стандартное поведение юзерспесной утилиты и способы его достижения
, которые более подробно можно рассмотреть в исходном коде утилиты mount.... mount will try to guess the desired
type. Mount uses the blkid library for guessing the filesystem type; if that does not turn up
anything that looks familiar, mount will try to read the file /etc/filesystems, or, if that does
not exist, /proc/filesystems. All of the filesystem types listed there will be tried, except for
those that are labeled "nodev" (e.g., devpts, proc and nfs). If /etc/filesystems ends in a line
with a single * only, mount will read /proc/filesystems afterwards.
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: [РЕШЕНО] Узнать тип файловой системы на носителе до монтирования
serzh-z писал(а): ↑26.02.2013 14:49Используя libblkid из util-linux. Примерно так:
Код: Выделить всё
................ blkid_probe_lookup_value(blprobe, "FSTYPE", &data, NULL);
Только одно уточнение, необходимо использовать параметр "TYPE", я проверял на util-linux-2.22-rc1.