私はハードドライブの詳細を取得するプログラムを書いています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);
}
上記のコードをrootとして実行すると、次のエラーが発生します。
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