【发布时间】:2014-09-30 20:46:39
【问题描述】:
我有一个应用程序需要从硬盘读取信息,比如串行模型等。
现在当然重要的是驱动器是 SAS、SATA 还是 FC 驱动器。
是否有可靠的方法可以识别连接的驱动器使用的协议?通过操作系统命令或检查一些日志或查询设备?
我不想使用 sysfs 结构。我想知道操作系统如何知道它是 ATA、SCSI 还是任何类型的磁盘。
【问题讨论】:
-
它可能被埋在 /proc 的某个地方。
-
sysfs 不是文件结构,它是内核用来导出信息的伪文件系统。当您尝试读取伪文件时,内核会生成内容,类似于
/proc中的条目。您明确声明您不想使用/sys,但答案——可能还有一些特定于总线和/或控制器的ioctl——就是答案。你把自己画在角落里;祝你好运。 -
@RG337:不,我告诉你内核通过
/sys/伪文件系统导出你想要的大部分信息。 (事实上,你只需要那个,在某些情况下,一些驱动程序/总线/设备特定的 ioctl 来获取所有信息;少数命令行工具可以为你做到这一点。)拒绝/sys/,你就是把自己的手绑在背后。 -
@RG337:你很失望,因为你选择的方法不起作用,你拒绝考虑其他任何方法,只是惊呼“这对我来说不可能”。问题是你的方法,而不是你的目标。我和其他人很乐意使用特定于操作系统的接口(如 Linux 中的
/sys/block/DEVICEpseudosymlink 和/sys/block/DEVICE/device/vendor和/block/DEVICE/device/model伪文件,以及所有架构上的sdparm、hdparm和smartctl跨平台实用程序)来以最小的麻烦和高可靠性找到此信息。 为什么这对你不起作用?
标签: c linux hard-drive sata