gpt4 book ai didi

linux - 用于 usb 设备/dev/sdb 的 opendir

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:49 25 4
gpt4 key购买 nike

我正在尝试在 C 程序中实现一种检测 USB 是否已连接的方法。我注意到当 USB 连接时,来自 shell 的以下命令将产生如下结果:

root:~# ls /dev/sdb
/dev/sdb

如果 USB 断开连接,我得到

root:~# ls /dev/sdb
ls: /dev/sdb: No such file or directory

因此我假设检测从 c 程序连接的 usb 的最佳方法应该是执行 opendir("/dev/sdb"),但打开调用总是失败。

您是否知道执行此检测的最佳方法是什么?

主要目标是在运行时程序中了解 udev 将硬盘安装到何处,以及 usb 闪存驱动器(如果已插入)的位置。谢谢,冉

最佳答案

A) 为什么你的 opendir 调用失败了?这很容易理解。因为 /dev/sdb 不是目录。对我来说,当您尝试将设备作为目录打开时,很难理解您的期望。如果你想从你的USB驱动器中获取文件列表,你需要挂载分区(/dev/sdb1, /dev/sdb2,等而不是 /dev/sdb) 到一些 mount point (directory)。如果您成功挂载它,那么您可以通过调用打开该目录。许多 Linux 发行版会自动挂载 USB 驱动器。您可以查看分发文档以获取有关自动安装 USB 驱动器的信息。

B) 我认为很容易理解为什么以这种方式检测 USB 设备是个坏主意。

=> 不同的计算机有不同数量的驱动器。所以在很多电脑上/dev/sdb - 是硬盘。

=> 假设您知道只有一个硬盘驱动器,计算机重启后磁盘命名仍然会发生变化,因此重启后 USB 驱动器可能会变成 sda 而硬盘驱动器会变成sdb(但通常不会发生这种情况)。

=> 通常,不可能预测一个新字母(sdbsdcsde)。

=> 您无法访问非 USB 驱动器的 USB 设备。

=> 这种解决方案还有很多其他问题。

C) 我不完全理解你的目标,但是如果你希望你的程序在插入 USB 设备时采取一些行动,那么你能做的最好的解决方案是阅读关于 udev 以及您的发行版的事件系统。如果你想用你的 usb 设备进行一些低级操作,你可以阅读 libusb。您可以使用 lsusb 命令获取有关 USB 设备的一般信息,该命令通常是发行版的一部分。您可以在谷歌上搜索一些其他推断器命令。

关于linux - 用于 usb 设备/dev/sdb 的 opendir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com