在我的 Linux C++ 应用程序中,我想获取系统上存在的所有 SCSI 磁盘的名称。例如/dev/sda、/dev/sdb、...等等。
目前我正在使用以下代码从文件 /proc/scsi/sg/devices 输出中获取它:
host chan SCSI id lun type 打开 qdepth 在线忙 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 磁盘名称吗?像系统调用?
谢谢