安装sysfs时mount()失败

时间:2014-05-03 09:48:40

标签: c mount

这是我在我的一个应用程序中使用的功能:

  #include <sys/mount.h>

   void  mount_sys() {
    if (0 != mount("none", "/sys", "sysfs", 0, "")) {
     printf("there is an error in mounting \n");   /* handle error */
    }
}

输出显示:

there is an error in mounting

如何获得有关失败原因的更多信息?

操作系统:RHEL 6,64位

1 个答案:

答案 0 :(得分:1)

而不是printf,您可以使用:

perror ("There is an error in mounting");

在调用之后将错误写入标准错误,顺序为:

There is an error in mounting: <some reason here>

然后查阅mount的手册页:

man 2 mount

它显示了(相当冗长的)可能性列表,例如:


  

EACCES :路径的某个组件无法搜索。 (另请参阅path_resolution(7)。)或者,尝试安装只读文件系统而不提供MS_RDONLY标志。或者,块设备源位于使用MS_NODEV选项安装的文件系统上。

     

EBUSY :已安装源。或者,它不能重新装入只读,因为它仍然保持文件打开以进行写入。或者,它无法挂载在目标上,因为目标仍然很忙(它是某个线程的工作目录,另一个设备的挂载点,打开文件等)。

     

EFAULT :其中一个指针参数指向用户地址空间之外。

     

EINVAL :来源的超级广告无效。或者,尝试了重新装入(MS_REMOUNT),但源尚未安装在目标上。或者,尝试了移动(MS_MOVE),但源不是挂载点,或者是&#39; /&#39;。

     

ELOOP :路径名解析过程中遇到的链接太多。或者,尝试移动,而目标是源的后代。

     

EMFILE :(如果不需要块设备:)虚拟设备表已满。

     

ENAMETOOLONG :路径名长于MAXPATHLEN。

     

ENODEV :文件系统类型未在内核中配置。

     

ENOENT :路径名为空或者组件不存在。

     

ENOMEM :内核无法分配免费页面来复制文件名或数据。

     

ENOTBLK :source不是块设备(需要设备)。

     

ENOTDIR :目标或源的前缀不是目录。

     

ENXIO :块设备源的主要编号超出范围。

     

EPERM :来电者没有所需的权限。