Перемонтировать файловую систему с помощью mount (), не зная типа файловой системы или исходного устройства

Мне нужно перемонтировать / только для чтения с C, работающим в Linux. Пока что я придумал следующий код:

mount("/dev/sda1", "/", "ext4", MS_REMOUNT | MS_RDONLY, NULL);

Но мне было интересно, есть ли способ сделать это без указания исходного устройства (/ dev / sda1) или типа файловой системы (ext4), например, команды mount -o remount,ro /. Можно ли просто заменить эти разделы системного вызова на NULL?


person Billy    schedule 25.08.2018    source источник
comment
Запустите strace mount -o remount,ro / в тестовой системе и посмотрите, как она вызывает mount. Это может быть определение устройства и типа файловой системы из информации statvfs (), копание в / proc и т. Д.   -  person zwol    schedule 25.08.2018
comment
mount -o remount,ro / ищет информацию о файловой системе, например, упомянутую @AndrewHenle.   -  person Billy    schedule 25.08.2018


Ответы (1)


Используйте getmntent() для перебора всех смонтированных файловых систем:

НАЗВАНИЕ

getmntent, setmntent, addmntent, endmntent, hasmntopt, getmntent_r - получить запись файла дескриптора файловой системы

ОБЗОР

   #include <stdio.h>
   #include <mntent.h>

   FILE *setmntent(const char *filename, const char *type);

   struct mntent *getmntent(FILE *stream);

   int addmntent(FILE *stream, const struct mntent *mnt);

   int endmntent(FILE *streamp);

   char *hasmntopt(const struct mntent *mnt, const char *opt);

   /* GNU extension */
   #include <mntent.h>

   struct mntent *getmntent_r(FILE *streamp, struct mntent *mntbuf,
                              char *buf, int buflen);

Найдите файловую систему, смонтированную в /, и получите ее устройство из возвращенного struct mntent.

person Andrew Henle    schedule 25.08.2018