나는 하드 드라이브 세부 정보를 얻는 프로그램을 작성했습니다 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_64
VMware에서 실행 중)
결과 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