我对mount函数有疑问,我想挂载一个ntfs磁盘,我准备好了ntfs-3g驱动程序,我可以在shell中使用ntfs-3g命令或mount命令挂载这个磁盘,但是当我尝试使用
mount("/dev/sda1", "/mnt/sda1","ntfs-3g",MS_MGC_VAL,NULL);
它总是失败。
我该怎么办?我不想使用“System()”,因为在我的系统中它总是返回-1(我不知道为什么,愚蠢的忙箱灰?),我需要状态来识别它是否成功。
请帮助,谢谢!!!!!!!
答案 0 :(得分:2)
我现在已经研究了这个问题几个小时了,我相信正在发生的事情是对这些事情的运作方式的误解。
挂载程序(我的Centos 6.5系统上的/ bin / mount)不是挂载系统调用的简单包装器。事实上,它在弄清楚它的处理方式以及尝试使用它的方法时非常聪明。
mount系统调用ONLY工作将作为内核模块的文件系统驱动程序。您可以在/ etc / filesystems或/ proc / filesystems中找到的东西。
ntfs-3g是FUSE驱动程序。安装FUSE文件系统的唯一正确方法是使用适当的安装程序。 (我系统上的ntfs-3g或/sbin/mount.ntfs)。这是因为除了需要内核资源之外,还必须运行用户空间程序。它是知道如何解释磁盘格式的用户空间程序,而不是内核的结尾。
正常的系统挂载程序指出它必须调用其他东西才能使挂载发生,并自动推断它需要/sbin/mount.ntfs并为你调用它。底层安装系统调用没有这样的功能。它只知道它无法挂载给定的文件系统并失败。
所以,你有两个选择:
修复系统上mount命令的错误。你可能想调查一下你是否有一个真正的坐骑'二进制或不。如果你这样做,直接调用可能会有所帮助。
如果你知道这个东西将是ntfs格式的,并且你没有真正的挂载程序,那么你可能想尝试直接调用ntfs-3g。
答案 1 :(得分:0)
您可以尝试以下解决方案:
验证您是否具有装入和卸载文件系统的正确权限。
int mount(const char *source, const char *target, const char *filesystemtype,
unsigned long mountflags, const void *data);
内核支持的filesystemtype
参数的值是
在/proc/filesystems
中列出。当其他类型变得可见时
加载适当的模块。检查那里是否列出ntfs-3g
。
检查挂载系统调用设置的errno
值,并根据错误描述修复问题。资料来源:man -s 2 mount
非常容易。只需在源代码中添加#include "errno.h"
即可。然后你可以从mount的手册页验证安装进入的错误是什么。以下是一个示例代码,可帮助您入门:
int retval = mount();//your system call if( retval != 0 ) { printf("ERROR:%d=%s\n",errno,strerror(errno)); }
尝试使用data
"allow_other,blksize=2048"
参数
尝试在/ etc / fstab中使用UUID而不是设备名称作为NTFS分区。
如果您需要更多帮助,请与我们联系。