umount不能与C中的设备一起使用(但它适用于终端)

时间:2015-05-30 14:50:50

标签: c linux mount

我正在尝试以编程方式卸载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不会改变任何内容。

如果我通过挂载点而不是设备,则该函数仍然有效,但the documentation says it works with both。我发现这种方法比读取/etc/mtab以获取挂载点并使用它更可靠。

  

功能:int umount2(const char * file,int flags)

     

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

     

umount2卸载文件系统。

     

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

有什么问题?

1 个答案:

答案 0 :(得分:0)

给你的mount_path。它应该工作。

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