如何通過ioctl調用或其他方式找出SCSI設備(如/ dev/sda)是否爲磁盤? 我試過以下,但ioctl
調用失敗。我的/ dev/sda是一個USB閃存盤。如何通過ioctl調用或其他方式找出SCSI設備(如/ etc/sda)是否爲磁盤?
#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很難做到這一點。 [根@本地〜]#執行cat/proc/SCSI/SCSI 連接設備: 主機:SCSI1頻道:00編號:00綸:00 供應商:SanDisk公司型號:的Cruzer修訂:8.01 **類型:指示按訪問** ANSI SCSI修訂版:02 – clyfe 2010-04-23 13:46:15