用C ++卸载USB驱动器

我正在开发一个Linux(Ubuntu)的Qt应用程序,我使用USB驱动器来备份一些内容。 应用程序应该在复制东西后卸载目标驱动器。 我有一个udev规则文件来挂载USB在特定的位置与ENV{mount_options}="relatime,users,umask=0,uid=user,gid=user"其中用户代表我的用户名。

我尝试使用这个没有任何运气。

 const char* usb = "/mnt/mountpoint/usbdrive"; if (!umount(usb)) { qDebug() << "Device unmounted"; } else { qDebug() << "Can't unmount" << strerror(errno); //this prints Operation not permitted } 

有人可以帮我吗? 我使用的是正确的吗?

提前致谢。

需要适当的权限(Linux: CAP_SYS_ADMIN功能)才能卸载文件系统。

umount代码是好的。 但是,您需要特权才能卸载设备。

CAP_SYS_ADMIN功能允许进程执行各种管理任务,即:调用mount(),umount()。 这里有两个值得关于功能的文章:

  • CAP_SYS_ADMIN:新的根
  • Linux功能概述(功能列表)

添加到/etc/sudoers行:

 user ALL=NOPASSWD: /bin/umount 

user是用户的名字。

而不是使用umount ...使用sudo -u user umount ...