在Linux中检测USB大容量存储器弹出/卸载
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Linux中检测USB大容量存储器弹出/卸载,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2225字,纯文字阅读大概需要4分钟。
内容图文
![在Linux中检测USB大容量存储器弹出/卸载](/upload/InfoBanner/zyjiaocheng/947/b87a5d5f673e4e35abc47b04ad719bf3.jpg)
我在Linux中使用g_file_storage小工具将分区导出为可移动USB大容量存储设备,以托管PC(Windows,Linux,MAC).
所有这些主机操作系统(都可以)自动安装可移动磁盘并毫无问题地访问它,我正在寻找一种方法来检测主机是否弹出/卸载了磁盘.
到目前为止,我发现的唯一方法仅限于Windows XP.当用户选择“安全删除硬件”时,XP会将USB设备置于挂起模式,该模式可以在远程端检测到.由于某些原因,这在Vista中不起作用.
解决方法:
我也遇到了这个问题.
我的嵌入式USB只读大容量存储项目监视主机中的SCSI命令.对于Mac OS X(10.5):在插件上,OS X驱动程序可以很好地告诉设备防止介质被移除(SCSI命令PREVENT / ALLOW MEDIUM REMOVAL).我的设备接受此命令.稍后,当用户发出设备应该退出的信号时,OS X再次非常好地再次发送带有ALLOW标志的PREVENT / ALLOW REMOVAL,然后发送SCSI START / STOP指示停止(或退出,不记得了).美丽.
但是,Windows XP似乎只是停止发送SCSI命令TEST UNIT READY.我看过; “安全删除硬件”不会发送任何SCSI信号,而只会导致TEST UNIT READY信号停止发出,这大约是每秒进行一次.基本上,Windows只会崩溃.
TEST UNIT READY超时可以在Windows上使用,但这是检测设备停止条件的糟糕方法.另外,由于OS X不能像Windows一样每秒对我的设备执行ping操作,因此它不适用于OSX.我会得到误报.
2009年11月15日更新
Sondergaard在这里汇报.
很大程度上取决于设备对USB Mass-Storage-Class SCSI“查询”命令的响应自身是否标识为“可移动”或“固定”.
如果该标志显示为可移动,那么我可以判断Windows XP用户是否“停止”了我的设备的唯一方法是每秒准备好退出测试单元的命令.如果该标志未标明可移动,则没有常规的“测试单元就绪”命令流. USB挂起也不能算在内,大约有1/4的测试“安全删除”没有发送USB挂起.不知道为什么它不一致.因此,如果您想确定,我为与WINDOWS XP仅兼容而做出的最佳建议是将“可移动”作为对INQUIRY的响应,寻找常规的“ TEST UNIT READY”命令,然后当它们停止运行时,请考虑将您安全地删除.
OS X(10.6)是另一回事.正如我在上面所写,这很有礼貌.它发送SCSI START / STOP来启动或降速设备,有时无需用户输入即可全部独立运行.但这意味着,如果您将STOP解释为说用户正在通过,并以设备内部的任何丑陋方式断开连接,则OS X在尝试再次旋转磁盘时可能会感到非常困惑.如果您的设备被标记为可移动,则OS X将在STOP之前发送ALLOW REMOVAL命令(或者在这种情况下是EJECT?),这表明它已经通过.
我没有穷尽尝试其他配置.我的应用程序是只读的,具有两个分区,并且必须标识为“不可移动”,因为Windows XP拒绝确认多个可移动USB驱动器分区(OS X两种方式都没有问题).因此,我的大部分测试都是在这种配置下进行的.
希望这可以帮助.
内容总结
以上是互联网集市为您收集整理的在Linux中检测USB大容量存储器弹出/卸载全部内容,希望文章能够帮你解决在Linux中检测USB大容量存储器弹出/卸载所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。