这是我在我的一个应用程序中使用的功能:
#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位
答案 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 :来电者没有所需的权限。