Как узнать, является ли устройство SCSI (например, dev/sda) диском или нет через вызовы ioctl или другое? Я пробовал следующее, но вызов ioctl
не удался. My/dev/sda - это USB-флеш-диск.Как узнать, является ли устройство SCSI (например,/etc/sda) диском или нет через вызовы ioctl или другое?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <scsi/scsi.h>
#include <scsi/sg.h>
#include <sys/ioctl.h>
int main(int argc, char** argv) {
char *dev = "/dev/sda";
struct sg_scsi_id m_id;
int rc;
int fd;
fd = open(dev, O_RDONLY | O_NONBLOCK);
if (fd < 0) {
perror(dev);
}
memset(&m_id, 0, sizeof (m_id));
rc = ioctl(fd, SG_GET_SCSI_ID, &m_id);
if (rc < 0) {
close(fd);
printf("FAIL: ioctl SG_GET_SCSI_ID, rc=%d, errno=%d\n", rc, errno);
} else {
if (m_id.scsi_type == TYPE_DISK || m_id.scsi_type == 14) {
printf("OK: is disk\n");
} else {
printf("OK: is NOT disk\n");
}
}
close(fd);
return (EXIT_SUCCESS);
}
// result is: FAIL: ioctl SG_GET_SCSI_ID, rc=-1, errno=22
ty, это действительно помогает, я буду копать еще немного, чтобы сделать это через ioctl tough. [корень @ локальный ~] # кота/Proc/SCSI/SCSI Присоединенные устройства: Хост: scsi1 Канал: 00 Id: 00 Лун: 00 Производитель: SanDisk Модель: Cruzer Rev: 8,01 ** Тип: Direct- Доступ ** Версия ANSI SCSI: 02 – clyfe