ioctl: HDIO_GET_IDENTITY에 대한 매개변수가 잘못되었습니다.

ioctl: HDIO_GET_IDENTITY에 대한 매개변수가 잘못되었습니다.

나는 하드 드라이브 세부 정보를 얻는 프로그램을 작성했습니다 HDIO_ ioctl calls.

프로그램을 작성한다는 것은Documentation/ioctl/hdio.txt커널 소스 코드(2.6.32)에서.

이것은 내 코드의 주요 부분입니다.

fd = open("/dev/sda", O_RDONLY);  // validated fd.
retval = ioctl(fd, HDIO_GET_IDENTITY, &driveid);
if(retval < 0) {
            perror("ioctl(HDIO_GET_IDENTITY)");
            exit(3);
}

위 코드를 루트로 실행하면 다음 오류가 발생합니다.

ioctl(HDIO_GET_IDENTITY): Invalid argument

프로그램에 문제는 없나요? 왜 오류가 발생하나요?

추가 정보: OS: CentOS-6.5, 커널 버전: 2.6.32, IA: ( x86_64VMware에서 실행 중)

결과 hdparm -i /dev/sda

SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
HDIO_GET_IDENTITY failed: Invalid argument

답변1

/dev/sda시스템에 장치가 있습니까? Driveid 변수는 어떤 유형입니까? 전체 코드를 보여주시거나 드라이브 ID를 다음으로 변경해 보세요.

struct hd_driveid driveid;

그런 다음 내용을 인쇄할 수 있습니다. 즉:

printf("Firmware Revision=%.8s\n",driveid.fw_rev);
printf("Cylinders=%d\n",driveid.cyls);

또한 확인하십시오: http://lxr.free-electrons.com/source/include/linux/hdreg.h?v=2.6.32

관련 정보