gpt4 book ai didi

c++ - Linux C++应用程序中获取SCSI磁盘名称的方法

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

在我的 Linux C++ 应用程序中,我想要获取存在于计算机上的所有 SCSI 磁盘的名称。系统。例如/dev/sda、/dev/sdb...等等。

目前,我使用以下代码从文件/proc/scsi/sg/devices 输出中获取它:

    host    chan SCSI id    lun     type    opens   qdepth  busy    online    0       0       0       0       0       1       128     0       1    1       0       0       0       0       1       128     0       1    1       0       0       1       0       1       128     0       1    1       0       0       2       0       1       128     0       1
// If SCSI device Id is > 26 then the corresponding device name is like /dev/sdaa or /dev/sdab etc.
if (MAX_ENG_ALPHABETS <= scsiId)
{
// Device name order is: aa, ab, ..., az, ba, bb, ..., bz, ..., zy, zz.
deviceName.append(1, 'a'+ (char)(index / MAX_ENG_ALPHABETS) - 1);
deviceName.append(1, 'a'+ (char)(index % MAX_ENG_ALPHABETS));
}
// If SCSI device Id is < 26 then the corresponding device name is liek /dev/sda or /dev/sdb etc.
else
{
deviceName.append(1, 'a'+ index);
}

但是文件/proc/scsi/sg/devices 还包含有关系统上先前存在的磁盘的信息。例如,如果我从系统中分离磁盘 (LUN)/dev/sdc文件/proc/scsi/sg/devices 仍然包含无效的/dev/sdc 信息。

告诉我是否有任何不同的方法来获取 SCSI 磁盘名称?就像系统调用一样?

谢谢

最佳答案

您可以简单地读取所有文件的列表,例如 /dev/sd*(在 C 语言中,您需要使用 opendir/readdir/linedir)并通过 sdX 过滤它(其中 X 是一个或两个字母)。

此外,您可以通过读取单个文件/proc/partitions来获取所有分区的列表,然后通过sdX过滤第四个字段:

$ cat /proc/partitions
major minor #blocks name

8 0 52428799 sda
8 1 265041 sda1
8 2 1 sda2
8 5 2096451 sda5
8 6 50066541 sda6

这将为您提供所有物理磁盘及其容量的列表(第三个字段)。

关于c++ - Linux C++应用程序中获取SCSI磁盘名称的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16229544/

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