2010-06-27 3 views

ответ

2

"#include <hdreg.h>" и использовать ioctl HDIO_GET_IDENTITY для получения struct hd_driveid.
В этой структуре поле x->sector_bytes является размером сектора.

#include <stdlib.h> 
#include <stdio.h> 
#include <sys/ioctl.h> 
#include <linux/hdreg.h> 
#include <fcntl.h> 
#include <errno.h> 
#include <string.h> 
#include <cctype> 
#include <unistd.h> 

int main(){ 
    struct hd_driveid id; 
    char *dev = "/dev/hdb"; 
    int fd; 

    fd = open(dev, O_RDONLY|O_NONBLOCK); 
    if(fd < 0) { 
     perror("cannot open"); 
    } 
    if (ioctl(fd, HDIO_GET_IDENTITY, &id) < 0) { 
     close(fd); 
     perror("ioctl error"); 
    } else { 
     close(fd); 
     printf("Sector size: %du\n", id.sector_bytes); 
    } 
} 
+0

спасибо. Один вопрос, почему open нужен флаг O_NONBLOCK? – IUnknownPointer

+0

См. Здесь: http://opengroup.org/onlinepubs/007908799/xsh/open.html – clyfe

+0

Эй, @clyfe, он не работает ... ioctl всегда возвращает ошибку. – IUnknownPointer

Смежные вопросы