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

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

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

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

1 Ответ

0 голосов
/ 25 августа 2018

Используйте 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.

...