在不知道文件系统类型或源设备的情况下使用 mount() 重新挂载文件系统

Remount filesystem with mount() without knowing the filesystem type or source device

我需要在 Linux 上使用 C 运行 以只读方式重新挂载 /。到目前为止,我想出了以下代码:

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

但我想知道是否有一种方法可以在不指定源设备 (/dev/sda1) 或文件系统类型 (ext4) 的情况下执行此操作,例如命令 mount -o remount,ro /。系统调用的那些部分可以简单地替换为 NULL 吗?

使用getmntent() to iterate over all the mounted filesystems:

NAME

getmntent, setmntent, addmntent, endmntent, hasmntopt, getmntent_r - get filesystem descriptor file entry

SYNOPSIS

   #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 中获取它的设备。