umount不适用于C中的设备(但它适用于终端)

我试图以编程方式卸载USB驱动器(设备/dev/sdb1 )。 如果我在Linux终端上运行sudo umount /dev/sdb1就行了。 但是,如果我gcc编译并运行以下C片段作为sudo ,则错误为ERRNO 22 = EINVAL (Invalid argument)

这是代码:

 #include "unistd.h" #include "sys/mount.h" #include "errno.h" int main() { int r = umount2("/dev/sdb1", MNT_FORCE); if (r != 0) return errno; else return 0; } 

这同样适用于umount()MNT_FORCE不会改变任何东西。

如果我通过挂载点而不是设备,该函数可以工作,但文档说它适用于两者 。 我发现这种方式比读取/etc/mtab更可靠,以获取挂载点并使用它。

function:int umount2(const char *文件,int标志)

初步:| MT-Safe | AS-Safe | AC-Safe | 请参阅POSIX安全概念。

umount2卸载文件系统。

您可以通过包含文件系统的设备专用文件或安装点来标识要卸载的文件系统。 效果是一样的。 指定为字符串文件。

怎么了?

给你的mount_path。 它应该工作。

  int r = umount2("/your_mount_path", MNT_FORCE);