【问题标题】:using mount(2) function in C在 C 中使用 mount(2) 函数
【发布时间】:2011-03-29 13:19:18
【问题描述】:

我一直在拼命寻找如何正确使用 mount() 函数的教程(他们非常擅长隐藏这些知识)。

我需要在单用户模式下将它用于 MNT_UPDATE " / "(在本例中为 /dev/disk0s2),但我找不到有关如何使用该功能的示例或教程。

ps。请不要“使用系统()” pps。我知道 /sbin/mount 存在是有原因的,我这样做是为了教育目的

【问题讨论】:

  • 你试过man 2 mount吗? (或本地 Unix 发行版中的任何手动类别)
  • @Nikolai N Fetissov:标签提到 OS X。
  • 是的,就语法而言,我了解如何使用 mount 我只是不清楚如何设置传递给它的参数。具体来说,如何在“/”上强制 MNT_UPDATE,它最初在单用户模式下以只读方式安装。本质上,我需要在不使用“/sbin/mount -uw /”的情况下完成“/sbin/mount -uw /”所做的事情

标签: c macos unix


【解决方案1】:

您可能已经在手册页中阅读过,您可以这样使用它:

int ret = mount("hfs", "/", MNT_UPDATE, some_data);

诀窍在于“数据”中的内容。它是一个特定于文件系统的结构,可以通过在系统头文件中查找文件系统名称来找到它。例如,对于 HFS,它位于 /usr/include/hfs/hfs_mount.h

struct hfs_mount_args {
    char     *fspec; /* <--- This is the device to mount */
    uid_t     hfs_uid;
    gid_t     hfs_gid;
    mode_t    hfs_mask;
    u_int32_t hfs_encoding;
    struct    timezone hfs_timezone;
    int       flags;
    int       journal_tbuffer_size;
    int       journal_flags;
    int       journal_disable;
};

【讨论】:

  • 对于 fspec 会是 hfs_mount_args->fspec = "/dev/disk0s2" 吗?
  • struct hfs_mount_args some_data; some_data.fspec = strdup("/dev/disk0s2"); int res = mount("hfs", "/", MNT_UPDATE ,&amp;some_data); NSLog(@"错误:%d %s",res,strerror(errno)); 给我错误:0 没有这样的文件或目录
  • @edlundquist:它不完全是一个论坛 :) 无论如何,代码应该被反引号包围,`like this`,like this。对于错误代码,mount 的返回值 0 表示成功,所以它可能确实有效,而 errno 之前是由其他东西设置的。
  • @edlundquist,你有一个成功的返回码(在这种情况下 errno 是未定义的,所以它应该被忽略)。您的挂载点会发生什么变化?
  • 它获得了我想要的读取权限,但现在看来我唯一可以挂载的分区是 disk0s2,如果尝试挂载 disk0s3,则尝试挂载到 /Volumes/ 时返回 -1测试分区
猜你喜欢
  • 2017-06-28
  • 2020-04-21
  • 2022-11-25
  • 1970-01-01
  • 2013-05-07
  • 2017-10-27
  • 2017-12-11
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多