Debian USB umount统计信息:设备的ioctl不正确

Debian USB umount统计信息:设备的ioctl不正确,debian,mount,usb-drive,Debian,Mount,Usb Drive,我正在为我的程序编写一些代码,以便使用 mount("/dev/sda", "/media", "vfat", MS_NOATIME, NULL) 并使用 status = umount2("/media",MNT_DETACH); qDebug("USB unmount - status = %s\n", strerror(errno)); 消息显示:USB卸载-状态=设备的ioctl不合适 事实上,闪存已成功卸载。我做错什么了吗 你看到的是一个从系统调用接口函数返回的零,表示成功,但是非

我正在为我的程序编写一些代码,以便使用

mount("/dev/sda", "/media", "vfat", MS_NOATIME, NULL)
并使用

status = umount2("/media",MNT_DETACH);
qDebug("USB unmount - status = %s\n", strerror(errno));
消息显示:
USB卸载-状态=设备的ioctl不合适
事实上,闪存已成功卸载。我做错什么了吗


<目标系统是Debian,我用C++和QT

< P>你看到的是一个从系统调用接口函数返回的零,表示成功,但是非零<代码> ErnOn<代码>是正常的。这是因为,一般来说,系统调用接口函数和其他一些C函数只在出现故障时设置
errno
,否则保持不变。(严格来说,函数调用成功后,
errno
的值未指定。)

以下是一段引用自:

errno的值只能在调用明确声明为其设置的函数后定义,直到下一次函数调用更改该值,或者如果应用程序为其赋值

只有当函数的返回值指示errno的值有效时,才应检查errno的值

成功调用函数后的errno设置未指定,除非该函数的描述指定不应修改errno

查看以下文档:

成功时,返回零。在出现错误时,返回-1,并正确设置errno


因此,对
umount2
的调用成功,
errno
的值未指定。
errno
很可能是由最近调用的某个函数设置的,该函数失败了。您可以在程序上运行
strace
,查看哪个系统调用失败;由于错误与ioctl有关,该函数可能是stdio基础结构的一部分,用于探测stdout的属性,发生这种情况很正常。

状态的值是多少?这是哪种语言?Python?@MarkPlotnick状态的值为0。根据,应该成功吗?是的,返回值为0表示成功。我已经添加了一个更完整的答案,试图解释你所看到的。打得好。我应该首先检查返回值,然后打印错误消息。errno确实是由以前的函数调用设置的。