¿Cómo saber si un dispositivo SCSI (digamos/dev/sda) es un disco o no a través de llamadas ioctl u otras? He intentado lo siguiente pero la llamada ioctl
falla. My/dev/sda es un disco flash USB.¿Cómo saber si un dispositivo SCSI (digamos/etc/sda) es un disco o no a través de llamadas ioctl u otras?
#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, sí ayuda, voy a cavar un poco más para hacerlo a través de ioctl tough. [root @ localhost ~] # cat/proc/SCSI/SCSI dispositivos adjuntos: Anfitrión: Canal scsi1: 00 Id: Lun 00: 00 Vendedor: SanDisk Modelo: Cruzer Rev: 8,01 ** Tipo: Directo Acceso ** ANSI SCSI revision: 02 – clyfe