在不知道文件系统类型或源设备的情况下使用 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
中获取它的设备。
我需要在 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
中获取它的设备。