ioctl: argumento inválido para HDIO_GET_IDENTITY

3

Eu escrevi um programa para obter os detalhes do disco rígido usando HDIO_ ioctl calls .

Para o programa de escrita, estou me referindo Documentation/ioctl/hdio.txt na fonte do kernel (2.6. 32).

Aqui está minha parte principal do código:

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);
}

Quando eu executo (como root) o código acima, recebi o erro abaixo:

ioctl(HDIO_GET_IDENTITY): Invalid argument

Qual é o problema no programa? Por que estou com erro?

Informações adicionais : SO: CentOS-6.5 , versão do kernel: 2.6.32 , IA: x86_64 (em execução no VMware).

Resultado de 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
    
por gangadhars 18.04.2014 / 08:18

1 resposta

0

Existe um dispositivo /dev/sda no seu sistema? Qual tipo é a variável driveid? Mostre-nos o código inteiro ou tente alterar o driveid para:

struct hd_driveid driveid;

Depois, você pode imprimir seu conteúdo, por exemplo:

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

Verifique também: link

    
por 18.04.2014 / 11:27