首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在代码中使用挂载功能挂载ntfs-3g?

如何在代码中使用挂载功能挂载ntfs-3g?
EN

Stack Overflow用户
提问于 2012-08-31 09:55:22
回答 2查看 2K关注 0票数 0

我对挂载函数有疑问,我想挂载一个ntfs磁盘,并且我已经准备好ntfs-3g驱动程序,我可以使用ntfs-3g命令或shell中的挂载命令挂载这个磁盘,但是当我尝试使用mount("/dev/sda1", "/mnt/sda1","ntfs-3g",MS_MGC_VAL,NULL);时,它总是失败的。

我能做什么?我不想使用" system ()“,因为在我的系统中,它总是返回-1(我不知道为什么,愚蠢的蒲箱灰?),我需要状态来识别它成功与否。

请帮帮忙,谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-09-29 18:58:25

我已经研究这个问题有几个小时了,我相信现在发生的是对这些事情是如何工作的错误理解。

  1. 挂载程序(我的CentOS6.5系统上的/bin/挂载)不是围绕挂载系统调用的简单包装器。事实上,它是相当聪明的,在弄清楚它在处理什么,以及如何使它安装。
  2. 挂载系统调用只起作用,文件系统驱动程序是内核模块。您可以在/etc/文件系统或/proc/文件系统中找到一些内容。

ntfs-3g是一个熔断器驱动程序。安装FUSE文件系统的唯一正确方法是使用适当的挂载程序。(ntfs-3g或/sbin/mount.ntfs在我的系统上)。这是因为除了需要内核资源外,还必须运行用户空间程序。知道如何解释磁盘格式的是用户空间程序,而不是事物的内核端。

正常的系统挂载程序指出,它必须调用其他东西才能实现挂载,并自动推断它需要/sbin/mount.ntfs并为您调用它。底层挂载系统调用没有这样的功能。它只知道它不能挂载给定的文件系统,并且失败。

所以,你有两个选择:

  1. 修复系统上挂载命令的任何错误。您可能想研究一下是否有实际的“挂载”二进制文件。如果你这么做了,直接打电话也许会有帮助。
  2. 如果您知道ntfs将被格式化,并且您没有真正的挂载程序,那么您可能需要直接调用ntfs-3g。
票数 2
EN

Stack Overflow用户

发布于 2012-08-31 10:49:35

您可以尝试以下解决方案:

  1. 验证您是否有正确的权限挂载和卸载文件系统。
  2. int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data); 内核支持的filesystemtype参数的值在/proc/filesystems中列出。当加载适当的模块时,进一步的类型将变得可见。检查是否列出了ntfs-3g
  3. 检查由挂载系统调用设置的errno值,并根据errno描述修复问题。来源:man -s 2 mount 这很容易。只需在源代码中添加#include "errno.h"即可。然后,您可以从挂载的手册页验证错误挂载正在进入的是什么。下面是一个让您开始的示例代码:

//系统调用if( retval != 0){ printf("ERROR:%d=%s\n",errno,strerror(errno));}

  1. 尝试使用类似于data的字符串挂载data参数
  2. 对于NTFS分区,尝试使用UUID而不是/etc/fstab中的设备名称。

如果你还需要帮助,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12212998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档