В моем приложении Linux C++ я хочу получить имена всех SCSI-дисков, которые присутствуют в системе . например/dev/sda,/dev/sdb, ... и так далее.Способ получения имен дисков SCSI в приложении Linux C++
В настоящее время я получаю его из выходного файла/Proc/SCSI/SG/устройств, используя код ниже:
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/устройства также содержит информацию о диске, который ранее присутствовал в системе. Например, если я отсоединяю диск (LUN)/dev/sdc от системы , файлы/proc/scsi/sg/devices по-прежнему содержат информацию о/dev/sdc, которая является недопустимой.
Скажите, есть ли другой способ получить имена дисков SCSI? как системный вызов?
Благодаря
Возможно, вам придется пройти через '/ proc' или'/sys' –